无法在searchBarCancelButtonClicked()中隐藏/显示tableFooterView

时间:2016-08-16 08:30:01

标签: ios swift uitableview uisearchbar uisearchbardelegate

我有一个带有tableFooterView的tableViewController。但我也有一个UISearchController,允许用户查找特定的行。我想在用户搜索时隐藏tableFooterView,但在搜索完成后将其恢复。

这是我的代码:

override func viewDidLoad() {
    super.viewDidLoad()

    let searchController = UISearchController(searchResultsController: nil)
    searchController.searchResultsUpdater = self
    searchController.dimsBackgroundDuringPresentation = false
    searchController.definesPresentationContext = true
    searchController.searchBar.delegate = self

    addPhoneNumberBtn.setTitle("Add phone number", forState: .Normal)
    addPhoneNumberBtn.setTitleColor(UIColor.blueColor(), forState: .Normal)
    addPhoneNumberBtn.addTarget(self, action: #selector(addPhoneNumberBtnClicked), forControlEvents: .TouchDown)

    footerView.frame = CGRect(x: 0, y: 0, width: self.tableView.frame.width, height: (self.tableView.frame.height*0.1)*iPADFACTOR)
    footerView.addSubview(addPhoneNumberBtn)
    tableView.tableFooterView = footerView
}

func updateSearchResultsForSearchController(searchController: UISearchController) {
        filterContentForSearchText(searchController.searchBar.text!)
        tableView.tableFooterView!.hidden = true
}
func searchBarCancelButtonClicked(searchBar: UISearchBar) {
        tableView.tableFooterView!.hidden = false
}

但这不起作用。点击取消按钮后,它仍然不可见。也尝试使用另一种方法:

func updateSearchResultsForSearchController(searchController: UISearchController) {
        filterContentForSearchText(searchController.searchBar.text!)
        tableView.tableFooterView = nil
}
func searchBarCancelButtonClicked(searchBar: UISearchBar) {
        tableView.tableFooterView = self.footerView
}

那也没有。奇怪的是,如果我在print()方法中尝试tableFooterView searchBarCancelButtonClicked()的框架,我会得到适合我的页脚的框架。两个委托方法都被调用。

此外,如果我做这样的事情:

func updateSearchResultsForSearchController(searchController: UISearchController) {
        filterContentForSearchText(searchController.searchBar.text!)
        tableView.tableFooterView!.hidden = false
}
func searchBarCancelButtonClicked(searchBar: UISearchBar) {
        tableView.tableFooterView!.hidden = true
}

尽管tableFooterView属性设置为hiddentrue仍然可见。我甚至尝试手动重新创建框架并将其分配给tableViewFooter属性。

我也尝试使用tableView.reloadData()但没有成功。我知道隐藏/显示tableFooterView的方法是正确的,因为如果我在像didSelectRowAtIndexPath这样的方法中实现它,我会成功获得所需的结果。

有没有人遇到类似的东西?感谢任何帮助。谢谢。

0 个答案:

没有答案