UISearchBar禁用取消按钮的自动禁用
我已经将一个UISearchBar实现到了一个表视图中,除了一件小事外,几乎所有东西都在工作:当我输入文本然后按下键盘上的搜索按钮时,键盘消失,搜索结果是表中唯一显示的项目,文本保留在UISearchBar中,但取消按钮被禁用。
我一直试图让我的列表尽可能接近Apple联系人应用程序的功能,当您在该应用程序中按搜索时,它不会禁用取消按钮。
当我查看UISearchBar头文件时,我注意到了_searchBarFlags结构下的autoDisableCancelButton标志,但它是私有的。
当我设置UISearchBar时,有什么我缺少的东西?
我找到了解决方案。 您可以使用此for-loop循环搜索栏的子视图,并在键盘上按下搜索按钮时启用它。
for (UIView *possibleButton in searchBar.subviews)
{
if ([possibleButton isKindOfClass:[UIButton class]])
{
UIButton *cancelButton = (UIButton*)possibleButton;
cancelButton.enabled = YES;
break;
}
}
为了在iOS7中为我工作,我必须调整这一点
- (void)enableCancelButton:(UISearchBar *)searchBar
{
for (UIView *view in searchBar.subviews)
{
for (id subview in view.subviews)
{
if ( [subview isKindOfClass:[UIButton class]] )
{
[subview setEnabled:YES];
NSLog(@"enableCancelButton");
return;
}
}
}
}
有两种方法可以轻松实现
- (void)searchBarSearchButtonClicked:(UISearchBar *)searchBar{
// The small and dirty
[(UIButton*)[searchBar valueForKey:@"_cancelButton"] setEnabled:YES];
// The long and safe
UIButton *cancelButton = [searchBar valueForKey:@"_cancelButton"];
if ([cancelButton respondsToSelector:@selector(setEnabled:)]) {
cancelButton.enabled = YES;
}
}
如果Apple将在后台更改它,则应该使用第二个,它不会让应用程序崩溃。
顺便说一句,我测试从iOS 4.0到8.2,没有任何变化,我也用它在我的商店批准的应用程序没有任何问题。
链接地址: http://www.djcxy.com/p/44235.html上一篇: UISearchBar disable auto disable of cancel button
下一篇: UISearchBar Keyboard