【问题标题】:Search Bar incorrectly overlays in multiple view controller of navigation controller搜索栏错误地覆盖在导航控制器的多个视图控制器中
【发布时间】:2015-10-27 20:46:18
【问题描述】:

我为如下所示的 UITableView 类创建了一个可以正常工作的搜索栏,

 class customTableViewController: UITableViewController,              UISearchResultsUpdating
{....
override func viewDidLoad() {
    super.viewDidLoad()

self.resultSearchController = ({
        let controller = UISearchController(searchResultsController: nil)
        controller.searchResultsUpdater = self
        controller.dimsBackgroundDuringPresentation = false
        controller.searchBar.sizeToFit()
        controller.hidesBottomBarWhenPushed = false
        controller.hidesNavigationBarDuringPresentation = false
        controller.searchBar.searchBarStyle = UISearchBarStyle(rawValue: 2)!

        self.tableView.tableHeaderView = controller.searchBar

        return controller
    })()
    self.tableView.reloadData()
    }
}

它工作正常,只是当我切换到另一个视图控制器时,无论我在哪个视图控制器中,搜索栏的图像都会保持在我的屏幕上。 当我尝试“searchBar.active = false”时,我得到零错误。

我该怎么做才能使这个 searchBar 只绘制在这个 tableViewController 上,而在我的导航中没有其他地方?

非常感谢。

【问题讨论】:

  • 请显示截图。
  • 试过了,信誉不够。
  • 在搜索新视图控制器时调用搜索栏上的 resignFirstResponder 怎么样?

标签: ios swift uisearchbar uisearchcontroller uisearchbardelegate


【解决方案1】:

我找到了一些解决方法, 在我的 prepareToSegue 中,我说:

   self.resultSearchController.searchBar.hidden = true
   self.resultSearchController.view.endEditing(true)

就是这样,在destinationViewController中我写了下面的代码来识别它返回到originalViewController并重新绘制栏。

override func viewWillDisappear(animated: Bool) {
    ....
    resultSearchController.searchBar.hidden = false
}

【讨论】: