searchBarCancelButtonClicked函数未被调用

时间:2017-05-12 14:06:46

标签: ios swift uisearchcontroller

问题

如果我在搜索栏处于活动状态时按下取消按钮(即显示闪烁的打字指示器和键盘),则运行 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()
}

0 个答案:

没有答案