Jas*_*ien 37 iphone objective-c uikit uisearchbar
我的界面中有一个UISearchBar,我想自定义输入一些文本后出现在搜索栏中的小清除按钮的行为(它是一个带有十字的小灰色圆圈,出现在右边搜索领域的一面).
基本上,我希望它不仅清除搜索栏的文本(这是默认的实现),而且还要清除我界面中的其他东西,但是调用我自己的方法之一.
我在UISearchBar类或UISearchBarDelegate协议的文档中找不到任何内容 - 看起来您不能直接访问此行为.
我注意到的一件事是文档解释了委托方法:
- (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText;
Run Code Online (Sandbox Code Playgroud)
点击清除按钮后调用.
我最初在该方法中编写了一些代码来检查搜索栏的文本属性,如果它是空的,那么它已被清除并执行我所有其他的东西.
这有两个问题:
首先,由于某些原因我无法理解,即使我在我的方法结束时告诉搜索栏resignFirstResponder,某些东西,某处正在将其设置回到firstFirstResponder.真烦人......
其次,如果用户没有使用清除按钮,并且只是使用键盘上的删除按钮删除栏中的文本,则此方法将被触发,其搜索结果将消失.不好.
任何正确方向的建议或指示都会很棒!
谢谢!
Waq*_*ikh 17
为这个问题找到了更好的解决方案:)
- (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText{
if ([searchText length] == 0) {
[self performSelector:@selector(hideKeyboardWithSearchBar:) withObject:searchBar afterDelay:0];
}
}
- (void)hideKeyboardWithSearchBar:(UISearchBar *)searchBar{
[searchBar resignFirstResponder];
}
Run Code Online (Sandbox Code Playgroud)
我在我的应用程序中有这个代码.区别在于我不支持"实时搜索",而是在用户触摸键盘上的搜索按钮时开始搜索:
- (void)searchBarTextDidBeginEditing:(UISearchBar *)searchBar {
if ([searchBar.text isEqualToString:@""]) {
//Clear stuff here
}
}
Run Code Online (Sandbox Code Playgroud)
Swift版本处理关闭键盘清除按钮单击:
func searchBar(searchBar: UISearchBar, textDidChange searchText: String) {
if searchText.characters.count == 0 {
performSelector("hideKeyboardWithSearchBar:", withObject:searchBar, afterDelay:0)
}
}
func hideKeyboardWithSearchBar(bar:UISearchBar) {
bar.resignFirstResponder()
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
47031 次 |
最近记录: |