如何访问 searchBar 的明文按钮?

Posted

技术标签:

【中文标题】如何访问 searchBar 的明文按钮?【英文标题】:How to access searchBar's clear text button? 【发布时间】:2010-12-02 04:30:55 【问题描述】:

当我点击 tableView 搜索上的“清除”按钮 (编辑时出现的那个) 时,我试图让键盘消失。如何检测何时单击“清除”按钮,以便我可以辞职 firstResponder? 我已经在textDidChange 方法中尝试过这个:

if (SearchBar.text == @"") 
    [SearchBar resignFirstResponder];
    NSLog(@"clear called");

没用……也试过了:

 if (SearchBar.text == nil) 
    [SearchBar resignFirstResponder];
    NSLog(@"clear called");

这两种方法都没有显示它们被调用过。有什么想法吗?

编辑:现在 resignFirstResponder 似乎不起作用。键盘停留在屏幕上。我做错了什么?

【问题讨论】:

【参考方案1】:

对于字符串比较,您应该使用

if([SearchBar.text isEqualToString: @""])

【讨论】:

是的,就是用那个方法。谢谢,这成功了。现在由于某种原因调用resignFirstResponder 不起作用。那好吧。 :)【参考方案2】:

您可以通过注册 KVO 通知来尝试查看搜索栏的 text 属性:

[self.searchBar addObserver:self forKeyPath:@"text" options:NSKeyValueObservingOptionNew context:NULL];

然后实施:

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context 
  if (object == self.searchBar && [keyPath isEqualToString:@"text"]) 
    // Handle the new value of self.searchBar.text
  

编辑:没关系,上面回答了=)

【讨论】:

嗯,这可行,但它比我的目的要复杂一些。不过,感谢您提供帮助!【参考方案3】:

我知道这个问题很老了,但另一种方法是:

if(searchText.length == 0)

- (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText

【讨论】:

其实这可能是最干净的处理方式,但我当时并不知道。感谢分享。

以上是关于如何访问 searchBar 的明文按钮?的主要内容,如果未能解决你的问题,请参考以下文章

当我尝试编辑文本时,searchBar.rx.textDidBeginEditing 不起作用

Swift:searchBar - 如何更改“取消”按钮标题

Swift:searchBar - 如何更改“取消”按钮标题

没有焦点时如何在SearchBar中单击一次取消按钮

离子搜索栏中的明文

修改searchBar的返回按钮的显示文字