我有在顶部的UISearchBar
一个UITableView
,并有不工作的特定要求执行上的UISearchBar行动。当键盘下跌,而x被窃听
我的UISearchBar (showsCancelButton = NO)
上没有取消按钮,所以我完全依靠UISearchBar
内的x取消现有的搜索。我依靠键盘的“搜索”按钮来关闭键盘(尽管它在我的情况下称为“完成”)。
当用户在我的应用程序中搜索时,我禁用navigation bar button
项目,因为它会给用户带来不好的体验,并且只有当搜索取消后,用户才能获得导航栏按钮项。这一切都工作。
我有一个特定的场景,但我无法绕过。
1)上的搜索栏上点击进入文字
2)单击完成对键盘和键盘将消失
3)用键盘辞职,在x保持在UISearchBar
4)点击UISearchBar
中的x,SearchBar
中的文字消失,并刷新视图
5)此时,应该再次启用导航栏按钮,不是。
代码:
- (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText
{
self.timelineSearchBar.showsCancelButton = NO;
if ([searchText length] == 0)
{
[self.timelineSearchBar performSelector:@selector(resignFirstResponder)
withObject:nil
afterDelay:0];
}
我知道,上面的代码是为了消除键盘当按下X这是罚款。
在我的情况下,键盘已经辞职了,所以我想在X轻叩只是重新启用导航栏项目。
self.addButton.enabled = YES;
因为如果上面的语句根本不做任何事情,并且导航栏项目仍然被禁用。
我甚至试图在if语句:
[self.timelineSearchBar performSelector:@selector(enableAdd)
withObject:nil
afterDelay:0];
- (void)enableAdd
{
self.addButton.enabled = YES;
}
但崩溃说搜索栏不给enableAdd选择作出回应。
我已经完成了一个断点,并且看到上面的if语句在我点击x并进入语句时确实计算为true,它会“运行”代码以启用按钮,但它永远不会发生。
也是我最终的编辑方法是:
- (void)searchBarTextDidEndEditing:(UISearchBar *)searchBar
{
[searchBar setShowsCancelButton:NO animated:YES];
self.addButton.enabled = YES;
}
更新:我没有成功尝试这里http://engineeringtheworld.wordpress.com/2011/04/11/detecting-when-clear-is-clicked-in-uisearchbar-x-button/链接 - 文本字段的shouldClear方法不会被调用。我正在使用iOS 7,所以也许有另一种方法来嵌入与textFields的意见?这很可能是正确的方法,但它不能与我的代码一起工作,因为该示例中的for语句永远不会被评估为真(我放入NSLog中)。
更新2:如果从if语句上面,我叫searchBarCancelButton方法,我只好所引起极端的循环,所以那当然是不正确的做法:
[self performSelector:@selector(searchBarCancelButtonClicked:) withObject:self.timelineSearchBar afterDelay: 0];
对此有何指导会真的很感激。我知道我错过了一个关键步骤,但我无法弄清楚。
你在哪里设置'addButton.enabled = NO'? – michaels
嗨迈克尔,在searchBarShouldBeginEditing和searchBarSearchButtonClicked与一个if([self.timelineSearchBar.text长度]> 0)语句,else在此委托方法中再次启用按钮。没有其他地方被设置为NO – amitsbajaj