问题
如果我在搜索栏处于活动状态时按下取消按钮(即显示闪烁的打字指示器和键盘),则运行 searchBarCancelButtonClicked 功能并“取消按下”打印出来。
但是,如果在searchBar未激活时按下取消按钮(即没有输入指示符,并且没有键盘显示),则不会调用 searchBarCancelButtonClicked 函数。而是调用 searchBarTextDidBeginEditing 函数。
问题
1)这是正常行为吗? 2)我如何改变这一点,以便即使searchBar不活动(第一响应者)也运行 searchBarCancelButtonClicked 函数?
注意
我没有使用UISearchController,只使用UISearchBar和UISearchBarDelegate函数。
代码
func searchBarTextDidBeginEditing(_ searchBar: UISearchBar)
{
DispatchQueue.main.async
{
self.searchBarHeader.setShowsCancelButton(true, animated: true)
}
searchActive = true
tableView.reloadData()
}
func searchBarCancelButtonClicked(_ searchBar: UISearchBar)
{
print("Cancel Pressed")
DispatchQueue.main.async
{
self.searchBarHeader.setShowsCancelButton(false, animated: true)
searchBar.resignFirstResponder()
}
searchBarHeader.text = ""
searchActive = false
filteredStopArray = []
tableView.reloadData()
}
func searchBarSearchButtonClicked(_ searchBar: UISearchBar)
{
DispatchQueue.main.async
{
searchBar.resignFirstResponder()
}
}
func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String)
{
filteredStopArray = stopArray.filter(
{ (dict) -> Bool in
let nameString: NSString = dict["Name"]! as NSString
let range = nameString.range(of: searchText, options: NSString.CompareOptions.caseInsensitive)
return range.location != NSNotFound
})
tableView.reloadData()
}