为什么不调用 searchBarTextDidEndEditing?

Why searchBarTextDidEndEditing not called?

我有这个代码:

extension VC : UISearchBarDelegate
{
    func searchBarTextDidEndEditing(_ searchBar: UISearchBar) {
        print("searchBarTextDidEndEditing")
    }

    func searchBarCancelButtonClicked(_ searchBar: UISearchBar) {
        // searchBar.resignFirstResponder()
    }
}

searchBarCancelButtonClicked 在点击搜索时触发,但 searchBarTextDidEndEditing 直到我调用 searchBar.resignFirstResponder()

才触发

我看了很多关于这个的问题和答案,但我不明白为什么会这样,resignFirstResponder() 在这里做什么?

documents resignFirstResponder

中所述

Notifies this object that it has been asked to relinquish its status as first responder in its window.

基本上这个函数调用告诉你的输入字段它不应该从用户那里得到更多的输入或者这个输入字段的输入操作已经完成。因此你的 searchBarTextField 结束了它的编辑状态并且 searchBarTextDidEndEditing 被调用。

如果您想了解更多关于 firstResponder 是什么的信息,那么您可能需要查看此 part 文档。

这可能对像我这样想知道为什么类似的委托方法没有触发的人有用。检查您是否已设置所有适当的代表,例如:

    searchController.searchResultsUpdater = self
    searchController.searchBar.delegate = self