如何设置 UISearchBar 的取消窗体标题为设置按钮属性性

&nbsp>&nbsp
&nbsp>&nbsp
&nbsp>&nbsp
UISearchBar的使用二: UISearchBar失去焦点,取消按钮无法响应
摘要:如图,当UISearchBar失去焦点的时候,取消按钮无法响应点击。只需要在失去焦点后,将取消按钮的enabled设置为YES即可。一般写在代理的searchBarSearchButtonClicked方法里。截图1.png-(void)searchBarSearchButtonClicked:(UISearchBar*)searchBar{[searchBarresignFirstResponder];UIButton*cancelBtn=[searchBarvalueFo
如图,当UISearchBar失去焦点的时候,取消按钮无法响应点击。只需要在失去焦点后,将取消按钮的enabled设置为YES即可。一般写在代理的searchBarSearchButtonClicked方法里。
- (void)searchBarSearchButtonClicked:(UISearchBar *)searchBar {
[searchBar resignFirstResponder];
UIButton *cancelBtn = [searchBar valueForKey:@&cancelButton&];
cancelBtn.enabled = YES;
显然,有个问题,如何知道私有属性名的呢?这里请参考《利用runtime获取私有属性名及类型》。除了使用kvc,还可以遍历UISearchBar子控件,但是这里需要使用递归的方法遍历子控件,才能找到cancelBtn。
以上是的内容,更多
的内容,请您使用右上方搜索功能获取相关信息。
若你要投稿、删除文章请联系邮箱:zixun-group@service.aliyun.com,工作人员会在五个工作日内给你回复。
新用户大礼包!
现在注册,免费体验40+云产品,及域名优惠!
云服务器 ECS
可弹性伸缩、安全稳定、简单易用
&40.8元/月起
预测未发生的攻击
&24元/月起
你可能还喜欢
你可能感兴趣
阿里云教程中心为您免费提供
UISearchBar的使用二: UISearchBar失去焦点,取消按钮无法响应相关信息,包括
的信息,所有UISearchBar的使用二: UISearchBar失去焦点,取消按钮无法响应相关内容均不代表阿里云的意见!投稿删除文章请联系邮箱:zixun-group@service.aliyun.com,工作人员会在五个工作日内答复
售前咨询热线
支持与服务
资源和社区
关注阿里云
International在 SegmentFault,学习技能、解决问题
每个月,我们帮助 1000 万的开发者解决各种各样的技术问题。并助力他们在技术能力、职业生涯、影响力上获得提升。
问题对人有帮助,内容完整,我也想知道答案
问题没有实际价值,缺少关键内容,没有改进余地
流程是这样的。
如果搜索框获得焦点。你直接点击取消按钮的话,会触发到searchBarCancelButtonClicked这个代理方法。
如果你输入东西,搜索之后,此时为了隐藏键盘,搜索框必须失去焦点,键盘才能收起。
[self.mySearchBar resignFirstResponder];
失去焦点之后,你再点击取消按钮,此时他就不执行searchBarCancelButtonClicked了。而是先获得焦点,然后你再点击,才执行到searchBarCancelButtonClicked。所以目前的问题就是点两次才能触发到searchBarCancelButtonClicked函数。
请问这个问题如何解决呢?
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
UIView或者继承UIView的都有endediting方法,调用这个,不会失去焦点,但是会收回键盘
[view endEditing:YES]
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
[self resignFirstResponder];
UIButton *cancelBtn = [self valueForKey:@"cancelButton"];
cancelBtn.enabled = YES;
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
我也遇到同样的问题;参照下面
该答案已被忽略,原因:
同步到新浪微博
分享到微博?
关闭理由:
删除理由:
忽略理由:
推广(招聘、广告、SEO 等)方面的内容
与已有问题重复(请编辑该提问指向已有相同问题)
答非所问,不符合答题要求
宜作评论而非答案
带有人身攻击、辱骂、仇恨等违反条款的内容
无法获得确切结果的问题
非开发直接相关的问题
非技术提问的讨论型问题
其他原因(请补充说明)
我要该,理由是:
在 SegmentFault,学习技能、解决问题
每个月,我们帮助 1000 万的开发者解决各种各样的技术问题。并助力他们在技术能力、职业生涯、影响力上获得提升。iOS UISearchBar的使用以及怎么设置searchBar下面的范围选择框_百度知道
iOS UISearchBar的使用以及怎么设置searchBar下面的范围选择框
答题抽奖
首次认真答题后
即可获得3次抽奖机会,100%中奖。
  UISearchBar使用  01./*取消按钮*/  02.- (void)searchBarCancelButtonClicked:(UISearchBar *)searchBar{  03.
[self doSearch:searchBar];  04.}  05.  06./*键盘搜索按钮*/  07.- (void)searchBarSearchButtonClicked:(UISearchBar *)searchBar{  08.
[searchBar resignFirstResponder];  09.
[self doSearch:searchBar];  10.}  11.  12./*搜索*/  13.- (void)doSearch:(UISearchBar *)searchBar{  14.
...  15.}  UISearchBar上按钮的默认文字为Cancel,如果想改为其他文字请调用一下代码  01.for(id cc in [searchtext subviews]){  02.
if([cc isKindOfClass:[UIButton class]]){  03.
UIButton *btn = (UIButton *)  04.
[btn setTitle:@&取消&
forState:UIControlStateNormal];  05.
}  06.}  怎么设置searchBar下面的范围选择框  searchBar的范围控件叫Scope Buttons。  self.searchBar.showsScopeBar = YES;  然而单单设了这个属性是没有用滴,要给他们安排按钮。比如说,这样:self.searchBar.scopeButtonTitles = [NSArray arrayWithObjects:@&1&,@&2&,@&3&,nil];  还有一个很重要的事情,设了按钮就要给他们安排功能。所以说,我们要实现这个代理UISearchBarDelegate里的这个方法searchBar:selectedScopeButtonIndexDidChange:。告诉表格,你选择的范围是啥。  还有要是设置默认选择哪个按钮的话,要设置这个属性,像这样就是默认选中第1个啦。  self.searchBar.selectedScopeButtonIndex = 0;
资深电脑人
为您推荐:
其他类似问题
ios的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。UISearchBar自定义取消按钮
前些天工作需要做一个搜索框,需要自定义右侧的取消按钮的颜色和文字,于是上网搜了一些资料,发现都出自一个模板,有一点偏差,所以在这里更正一下,让同学们少走一点弯路。
首先初始化一个UISearchBar
- (void)initSearchBar
_searchBar = [[UISearchBar alloc] initWithFrame:CGRectMake(20, 100, 300, 44)];
_searchBar.translucent
_searchBar.delegate
_searchBar.placeholder
= @&名称&;
_searchBar.keyboardType = UIKeyboardTypeD
[_searchBar setShowsCancelButton:YES];//显示右侧取消按钮
[self.view addSubview:self.searchBar];
我想要将右侧的取消按钮文字改成&搜索&,很显然它是一个UIButton,但是我们不能拿到这个属性,也没有更改它的方法。我不得不遍历UISearchBar的子控件找到她,这里介绍一个私有方法打印它的所有子控件(提交AppStore时不要出现这个方法)。
NSLog(@&%@&, [_searchBar performSelector:@selector(recursiveDescription)]);
打印结果如下:
; layer = &
| &_UISearchBarSearchFieldBackgroundView: 0x7fcff0d3d100; frame = (0 0; 0 0); opaque = NO; autoresize = W+H; userInteractionEnabled = NO; layer = &
这时我发现在二级子控件中有个有一个UINavigationButton,就是要更改的取消按钮(其它版本的答案都写的它在UISearchBar的一级子控件中)。我们虽然不能调用UINavigationButton这个类,但是我们清楚它继承了UIButton,所以我们可以取到并更改它。
for (UIView *view in [[_searchBar.subviews lastObject] subviews]) {
if ([view isKindOfClass:[UIButton class]]) {
UIButton *cancelBtn = (UIButton *)
[cancelBtn setTitle:@&搜索& forState:UIControlStateNormal];两种方法1:直接遍历searchBar子视图,这种方法不太好,因为随着版本升级它内部层级可能会发生变化(例如IOS11的导航栏,懂得自然懂)
2:取私有变量
&  UIButton *cancel = [self valueForKey:@"_cancelButton"];
& & [cancel setTitle:@"取消" forState:UIControlStateNormal];
& & //这种状态不写是不行的
& & [cancel setTitle:@"取消" forState:UIControlStateDisabled];
& & [cancel setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
& & [cancel setTitleColor:[UIColor blackColor] forState:UIControlStateDisabled];
& & cancel.titleLabel.font = [UIFont systemFontOfSize:14];
Tips:私有变量是如何取到的,下面给出一段代码(看打印后自己凭命名猜的)
//获取第一个成员变量的地址
Ivar *ivars = class_copyIvarList([UISearchBar class], &count);
for (int i = 0; i & i++) {
Ivar ivar = *(ivars + i);
NSLog(@"%s",ivar_getName(ivar));
//谁copy谁释放
free(ivars);
阅读(...) 评论()}

我要回帖

更多关于 窗体标题为设置按钮属性 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信