我有一个UISearchBar,它充当表视图的实时过滤器.当键盘通过endEditing:解除时,查询文本和灰色圆形"清除"按钮保持不变.从这里,如果我点击灰色的"清除"按钮,键盘会在文本被清除时重新出现.
我该如何防止这种情况?如果键盘当前未打开,我希望该按钮在不重新打开键盘的情况下清除文本.
当我点击清除按钮时,会调用一个协议方法.但是向UISearchBar发送resignFirstResponder消息对键盘没有任何影响.
我正在使用UISearchBar(但不是通常联合使用的SearchDisplayController),当你点击'X'按钮时我想解除键盘.
我遵循了TomSwift的建议,当'X'被敲击并且效果很好时被叫.但是,从文本字段中退出第一个响应者并在UISearchBar实例中调用它们resignFirstResponder都不会使键盘消失.
当用户轻敲X按钮时,有没有办法摆脱键盘?
这是我为了获得'清除'通知而做的事情:
- (void)viewDidLoad:
{
for (UIView* v in searchBar.subviews)
{
if ( [v isKindOfClass: [UITextField class]] )
{
UITextField *tf = (UITextField *)v;
tf.delegate = self;
break;
}
}
}
Run Code Online (Sandbox Code Playgroud)
然后我有我的类设置来实现UISearchBarDelegate和UITextFieldDelegate.
将该类作为文本字段委托允许我接听此调用:
- (BOOL)textFieldShouldClear:(UITextField *)textField
{
[textField resignFirstResponder];
[self.searchBar resignFirstResponder];
return YES;
}
Run Code Online (Sandbox Code Playgroud)
我已经尝试了所有我能想到的东西.我正在尝试的最后一件事是找到一种方法来发出UISearchDelegate将在我的Controller类上调用的'searchBarCancelButtonClicked',但不是我确定我怎么能这样做,因为UISearchBar似乎没有任何直接方法使用此名称调用.
按'x'按钮时如何处理事件?
我尝试这种方法但不起作用.
-(void)searchBarCancelButtonClicked:(UISearchBar *)searchBar{
}
Run Code Online (Sandbox Code Playgroud)

我想扩展或添加另一种方法到现有的协议.虽然协议特别重要,但这正是我想要做的.
@protocol NSMatrixDelegate
- (void)myNewMethod:(id)sender;
@end
Run Code Online (Sandbox Code Playgroud)
编译器警告我有相同协议的重复声明.我该怎么做呢?
谢谢.
uisearchbar ×3
iphone ×2
appearance ×1
cocoa ×1
delegates ×1
ios ×1
keyboard ×1
protocols ×1
uitextfield ×1
xcode ×1