我有一个带有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
属性设置为hidden
,true
仍然可见。我甚至尝试手动重新创建框架并将其分配给tableViewFooter
属性。
我也尝试使用tableView.reloadData()
但没有成功。我知道隐藏/显示tableFooterView
的方法是正确的,因为如果我在像didSelectRowAtIndexPath
这样的方法中实现它,我会成功获得所需的结果。
有没有人遇到类似的东西?感谢任何帮助。谢谢。