UISearchBar 和事件在“X”时触发元素被点击
在 UISearchBar 上,有一个 X 元素,可让您一次清除所有内容。发生这种情况时有办法收到通知吗?
UISearchBarDelegate::searchBarCancelButtonClicked
仅在点击“取消”按钮时触发。
On the UISearchBar, there's an X element that allows you to clear all of the contents at once. Is there a way to get notified when this happens?
UISearchBarDelegate::searchBarCancelButtonClicked
is fired only when the "Cancel" button is tapped.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
UISearchBar
没有此事件的委托方法。通过实现回调委托的textDidChange:
方法并检查空字符串,您几乎可以获得您想要的结果。我不推荐它,但还有另一种可能的方法。
UISearchBar
由 UITextField 组成,它有一个委托方法,当用户点击清除按钮 (textFieldShouldClear:
) 时会调用该方法。您可以通过遍历UISearchBar
的子视图来获取UITextField
:(这是在派生
UISearchBar
类的上下文中),您可以将
UITextField
委托重新分配给您自己的实现,并注意将委托调用转发给旧委托。这样您就可以拦截textFieldShouldClear:
。或者,如果事实证明UISearchBar
是它包含的UITextField
的委托,您可以混合对 textFieldShouldClear 的调用:...不理想,显然,但技术上可行。The
UISearchBar
doesn't have a delegate method for this event. You can nearly get what you want by implementing thetextDidChange:
method of the callback delegate and checking for an empty string.I don't recommend it, but there is another possible way. The
UISearchBar
is composed of a UITextField, which does have a delegate method that is called when the user taps the clear button (textFieldShouldClear:
). You can get theUITextField
by traversing theUISearchBar
's child views:(this is in the context of a derived
UISearchBar
class)from here, you could re-assign the
UITextField
delegate to your own implementation, taking care to forward delegate calls to the old delegate. This way you could intercepttextFieldShouldClear:
. Or if it turns out theUISearchBar
is the delegate for theUITextField
it contains you could swizzle the call to textFieldShouldClear:... Not ideal, clearly, but technically feasible.我遇到了同样的问题,我通过使用此功能解决了这个问题。
I had the same issue and I solved this issue by using this function.
这是上一个问题的答案,这应该完全符合您的要求。 UISearchbar clearButton 强制键盘显示
Here is an answer from a previous question, this should do exactly what you want. UISearchbar clearButton forces the keyboard to appear
这是“方法混合”解决方案。
UISearchBar
的新类别。此类别在运行时在-(BOOL)textFieldShouldClear:(UITextField *)textField;
和-(BOOL)jbm_textFieldShouldClear:(UITextField *)textField
之间创建一个新方法和 swizzle 方法。UISearchBarDelegate
的新协议,以添加新方法- (void)searchBarClearButtonClicked:(id)sender;
UISearchBar+JMBTextFieldControl.h
UISearchBar+JMBTextFieldControl.m
参考
如何向现有协议添加方法可可?
尼古拉·弗拉索夫 - CCBottomRefreshControl
Here is "Method Swizzling" solution.
UISearchBar
. This category create a new method and swizzle method between-(BOOL)textFieldShouldClear:(UITextField *)textField;
and-(BOOL)jbm_textFieldShouldClear:(UITextField *)textField
in runtime.UISearchBarDelegate
in order to add a new method- (void)searchBarClearButtonClicked:(id)sender;
UISearchBar+JMBTextFieldControl.h
UISearchBar+JMBTextFieldControl.m
Reference
Dave DeLong -
How to add a method to an existing protocol in Cocoa?
Nikolay Vlasov - CCBottomRefreshControl