(Swift) 即使没有文本,如何在搜索栏上显示取消按钮?

far*_*s97 0 uisearchbar ios swift

我有一个带Cancel按钮的搜索栏。取消按钮仅在我开始在搜索栏中键入文本时出现。
我想要的是在用户点击搜索栏的那一刻显示取消按钮(当光标和键盘出现时)。

代码:

let searchController = UISearchController(searchResultsController: nil)
    var isSearchBarEmpty: Bool {
        return searchController.searchBar.text?.isEmpty ?? true
    }
    var searching = false
Run Code Online (Sandbox Code Playgroud)

搜索栏方法:

func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) {
        let cancelButtonAttributes = [NSAttributedString.Key.foregroundColor: UIColor.systemGreen]
        UIBarButtonItem.appearance().setTitleTextAttributes(cancelButtonAttributes , for: .normal)

        searching = true
        searchBar.showsCancelButton = true
        tableView.reloadData()
    }

    func searchBarSearchButtonClicked(_ searchBar: UISearchBar)
    {
        searching = false
        self.searchBar.endEditing(true)
    }

    func searchBarCancelButtonClicked(_ searchBar: UISearchBar) {
        searching = false
        searchBar.text = nil
        searchBar.showsCancelButton = false
        searchBar.endEditing(true)
        tableView.reloadData()
    }
Run Code Online (Sandbox Code Playgroud)

Kis*_*iya 5

您可以尝试委托方法

func searchBarTextDidBeginEditing(_ searchBar: UISearchBar) {

   searchBar.setShowsCancelButton(true, animated: true)

}
Run Code Online (Sandbox Code Playgroud)

func searchBarTextDidEndEditing(_ searchBar: UISearchBar) {

    searchBar.setShowsCancelButton(false, animated: true)
}
Run Code Online (Sandbox Code Playgroud)