使用UISearchBar解除键盘,而无需重新启动第一响应者

Mik*_*ike 9 iphone cocoa-touch uisearchbar

嘿,我正在iPhone上开发基于导航的应用程序,类似于联系人应用程序.当您在搜索栏中输入内容并在表格中滚动(在联系人应用程序中)时,键盘会消失.我不认为它会让第一个响应者辞职,因为当我尝试在 - (void)scrollViewDidScroll:(UIScrollView*)scrollView时,它会禁用取消按钮,这在联系人应用程序中不会发生.基本上我的问题是如何在不禁用取消按钮的情况下解除键盘,就像在联系人应用程序中一样?

谢谢

swe*_*pez 7

好吧,刚刚遇到了这个非常古老的问题。您可以在开始滚动时启用“取消”按钮,如下所示:

func scrollViewWillBeginDragging(scrollView: UIScrollView) {
    searchBar.resignFirstResponder()
    let searchCancelButton = searchBar.valueForKey("cancelButton") as! UIButton
    searchCancelButton.enabled = true // <-- THIS line is the trick

}
Run Code Online (Sandbox Code Playgroud)

斯威夫特 4

func scrollViewWillBeginDragging(_ scrollView: UIScrollView) {
    searchBar.resignFirstResponder()
    let cancelButton = searchBar.value(forKey: "cancelButton") as! UIButton
    cancelButton.isEnabled = true
}
Run Code Online (Sandbox Code Playgroud)


Bog*_*tyr 0

(正如自我回答评论中所暗示的)如果你想获得像内置联系人应用程序一样的表搜索行为,你不能只是将 UISearchBar 放入带有 UITableView 的视图中,而是需要一起使用 UITableViewController与Search Display Controller. 这个示例应用程序是一个完美的指南:

https://developer.apple.com/library/ios/#samplecode/TableSearch/Introduction/Intro.html