yzc577亚洲城亚洲娱乐第一站iOS 为什么UISearchBar的协议方法始终不执行 如下代码

( yzc577亚洲城亚洲娱乐第一站 )

<UITableViewDelegate, UITableViewDataSource,BookDetailViewDelegate,UISearchBarDelegate, UISearchDisplayDelegate>这是协议

这是初始化
_searchBar = [[UISearchBar alloc] initWithFrame:CGRectMake0, 64, SCREEN_WIDTH, 44];

_searchBar.delegate = self;
[_searchBar setShowsScopeBar:NO];
[_searchBar sizeToFit];

[self.view insertSubview:_searchBar atIndex:3];

都在.m文件中

  • voidsearchBarCancelButtonClicked:UISearchBar *searchBar
    {

    //查询所有
    [self filterContentForSearchText:@"" scope:-1];

    }

//当文本内容发生改变时候,向表视图数据源发出重新加载消息

  • BOOLsearchDisplayController:UISearchDisplayController controller shouldReloadTableForSearchString:NSString searchString
    {
    [self filterContentForSearchText:searchString scope:_searchBar.selectedScopeButtonIndex];
    //YES情况下表视图可以重新加载
    return YES;
    }

// 当Scope Bar选择发送变化时候,向表视图数据源发出重新加载消息

  • BOOLsearchDisplayController:UISearchDisplayController *controller shouldReloadTableForSearchScope:NSIntegersearchOption
    {
    [self filterContentForSearchText:_searchBar.text scope:searchOption];
    // YES情况下表视图可以重新加载
    return YES;
    }这三个方法 我输入文字后 断点后发现一个都没执行 为什么啊 第一次写搜索框

delegate 用错了,是 UISearchBar 的 delegate ,不是 UISearchDisplayController 的,你没有用到 SearchDisplayController ,

PS: 下次提问能好好排下版吗……

(看完/读完)这篇文章有何感想! yzc577亚洲城亚洲娱乐第一站的分享…

yzc577亚洲城亚洲娱乐第一站如何调用iOS系统相机的声音

( yzc577亚洲城亚洲娱乐第一站 )

有一个需求 点击一个按钮截图. 需要有一个相机照片”咔擦”的声音?请问如何调用

自己找到了方法
AudioServicesPlaySystemSound 1108;

(看完/读完)这篇文章有何感想! yzc577亚洲城亚洲娱乐第一站的分享…

www.yzc577.com虾米音乐的将播放器界面固定在屏幕底部是如何实现的?

( www.yzc577.com )

新手求思路,感谢!

需求是将播放器界面固定在主界面底部(即屏幕底部),从右侧滑入控制器时,播放器保持不动,从左侧滑入视图控制器时,播放器界面固定在主视图界面底部,随主界面一起右移。

我不是虾米的开发 但是我是多米的开发
第一种 简单粗暴 直接贴到KeyWindow上 这样做比较暴力 入侵性比较大。
第二种 稍微hack一点 就是把这个playBarView给放到 tabbar上 管理什么的都交给tabbar去做 ,隐藏什么的逻辑都比较好实现。

这种问题都是仁者见仁智者见智,界面上的东西 100个人有1024中实现方式。

(看完/读完)这篇文章有何感想! www.yzc577.com的分享…

yzc577亚洲城亚洲娱乐第一站在.m文件的interrface中的变量声明和方法声明区别?

( yzc577亚洲城亚洲娱乐第一站 )

通过拖线的方式,将控件属性放到.m文件的@interface中的变量声明方法声明中有什么不同呢,为什么放到变量申明的时候不能通过self.去访问?如图中3位置中只能访问2位置而不能访问1位置中的声明。

self.是调用setter和getter方法,你只在位置1处做了变量声明,没有写该属性的setter和getter方法。

@interface MyClass Category
-Abc* testFunc;
@end

这种括号里有字的 就是给一个类声明了一个Catetory

@interface MyClass 
-Abc* testExtension;
@end

这种括号里没字的 是extension 里边都是这个类私有的变量和方法

(看完/读完)这篇文章有何感想! yzc577亚洲城亚洲娱乐第一站的分享…

yzc577亚洲城亚洲娱乐第一站iOS真机上和模拟器都能调用接口,但真机上却不能刷新界面。模拟器却能

( yzc577亚洲城亚洲娱乐第一站 )

比如写一个按钮 调用一个地图放大的按钮。
真机和模拟器都进断点。都没问题。 但是只有模拟器能放大地图。 真机却一点动作都没有。
方法都调用了 参数也没错。 急急急!!! 哪位大神路过的帮忙看看 感激不尽!

用最新的百度sdk试试

该答案已被忽略,原因:宜作评论而非答案

(看完/读完)这篇文章有何感想! yzc577亚洲城亚洲娱乐第一站的分享…

yzc577亚洲城娱乐关于cell重用的一些很纠结的问题(来大神解释下)

( yzc577亚洲城娱乐 )


static NSString *orderCellID = @"MyOrderCell";

[self.mTableView registerClass:[MyOrderCell class] forCellReuseIdentifier:orderCellID];
1.MyOrderCell *cell = MyOrderCell *[tableView dequeueReusableCellWithIdentifier:orderCellID];

    if cell == nil {

       cell = [[MyOrderCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:orderCellID];

    }
2.MyOrderCell *cell = [self.mTableView dequeueReusableCellWithIdentifier:orderCellID forIndexPath:indexPath];

这两种重用cell的方法问题就是…

- CGFloattableView:UITableView *tableView heightForRowAtIndexPath:NSIndexPath *indexPath {

    UITableViewCell *cell = [self tableView:tableView cellForRowAtIndexPath:indexPath];
    
    NSLog@"cell height %f",cell.frame.size.height;
    
    return cell.frame.size.height;
}

如果用方法2.的话为什么
UITableViewCell *cell = [self tableView:tableView cellForRowAtIndexPath:indexPath];
就报错了?????

但是用方法1的话确实是可行的…可以来个大神详细解释下吗

你的两种方法其实就是一种,是说,

[self.mTableView dequeueReusableCellWithIdentifier:orderCellID forIndexPath:indexPath];

这个方法,不论现在是否有已经生成的等待重用的cell,它都保证会返回一个cell(如果有的话就取,没有的话就再生成一个新的)。但是这个方法调用的时候有一个条件,就是你必须已经调用了registerClass或者registerNib方法注册过,这个文档里面都是写的有的。
而另一个方法则是判断是否有已经生成的等待重用的cell,有的话就取一个返回,没有的话就返回nil,所以需要你在下面判断是否为nil然后自己创建。

[self tableView:tableView cellForRowAtIndexPath:indexPath];

这个方法不能自己手动调用,这个方法返回的cell是要展示在界面上并且参与重用的,如果你手动调用了这个方法,它返回的cell在你算高之后就没用被释放掉了。你代码里面这里算高的时候每次调用方法都会生成一个cell。

所以你所纠结的重用的问题其实就是因为你手动调用了tableView:cellForRowAtIndexPath:这个函数。

1 就算可行,返回的也应该是 nil 吧

- CGFloattableView:UITableView *tableView heightForRowAtIndexPath:NSIndexPath *indexPath {

    UITableViewCell *cell = [self tableView:tableView cellForRowAtIndexPath:indexPath];
    
    NSLog@"cell height %f",cell.frame.size.height;
    
    return cell.frame.size.height;
}

这段代码通常不能这么写吧。返回高度不能这样取cell,然后返回高度。要知道这个代理方法在被调用的时候,- UITableViewCell *tableView:UITableView *tableView cellForRowAtIndexPath:NSIndexPath *indexPath还没执行,两者的调用顺序一定要明白。
Tableview是预先要拿到高度,然后用重用cell的方式返回cell,cell按照之前的高度进行布局。

所以返回高度的代理方法,一般大概有两种思路:

  1. 拿到cell内部各种UI元素的高度、间距,进行累加计算,见下面参考链接。

  2. 如果采用Autolayout约束,采用`[cell.contentView systemLayoutSizeFittingSize:UILayoutFittingCompressedSize]的方式计算高度,这方面可以参考下
    开源项目https://github.com/forkingdog/UITableView-FDTemplateLayoutCell

可以看下:动态计算UITableViewCell高度详解

楼上说得对。系统的代理方法最好不要自己主动调用,保不齐会出什么问题。
另外,楼主的问题 2.MyOrderCell *cell = [self.mTableView dequeueReusableCellWithIdentifier:orderCellID forIndexPath:indexPath]; 这样写为什么不行。

官方文档对dequeueReusableCellWithIdentifier:的解释:
Returns a reusable table-view cell object located by its identifier.
A string identifying the cell object to be reused. This parameter must not be nil.

Returns A UITableViewCell object with the associated identifier or nil if no such object exists in the reusable-cell queue.

看见了没,你要想已经有一个reusable的cell,首先你得曾经创建过一个啊!你都没有创建过,系统是不会帮你变出来一个存着的。第一种方法是对的,就是因为当系统发现并没有可重用的cell的时候返回了nil,然后你自己alloc了一个出来,这个cell会被系统加入到一个队列中,下一次你要根据identifier重用的时候系统就有东西拿给你了
查到一个可供参考:链接描述

第二种 你要先在tableView 注册一下cell

(看完/读完)这篇文章有何感想! yzc577亚洲城娱乐的分享…

yzc577亚洲城亚洲娱乐第一站如何把一张图放到一个模版里生成一张图分享到微信

( yzc577亚洲城亚洲娱乐第一站 )

前提是这张图不能被压缩,利用截屏的方式,生成的图片质量只能是设备的分辨率,假如原图分辨率很高(例如上图),最后合成的图看起来就会模糊。

(看完/读完)这篇文章有何感想! yzc577亚洲城亚洲娱乐第一站的分享…