以编程方式将 UISearchController 添加到 swift 2 中的 UITableView 标头

Posted

技术标签:

【中文标题】以编程方式将 UISearchController 添加到 swift 2 中的 UITableView 标头【英文标题】:Programmatically add a UISearchController to a UITableView header in swift 2 【发布时间】:2016-04-17 13:19:59 【问题描述】:

在我的视图控制器(基于情节提要)的先前版本中,搜索栏运行良好。 在 100% 以编程方式定义的当前版本(我删除了所有故事板引用)中,搜索栏消失了。 我试图了解问题出在哪里,但没有成功。有什么想法吗?

这里是错误代码sn-p:

let resultSearchController = UISearchController()

override public func viewDidLoad() 
    super.viewDidLoad()

    // No nav bar
    navigationController?.navigationBar.hidden = true

    // — Add table view
    view.addSubview(tableView)
    tableView.delegate = self
    tableView.dataSource = self
    tableView.translatesAutoresizingMaskIntoConstraints = false
    tableView.leftAnchor.constraintEqualToAnchor(view.leftAnchor, constant: 0).active = true
    tableView.rightAnchor.constraintEqualToAnchor(view.rightAnchor, constant: 0).active = true
    tableView.bottomAnchor.constraintEqualToAnchor(view.bottomAnchor, constant: 0).active = true


    // Add search bar as a the table header

    resultSearchController.dimsBackgroundDuringPresentation = false
    resultSearchController.definesPresentationContext = true
    resultSearchController.hidesNavigationBarDuringPresentation = false

    resultSearchController.searchResultsUpdater = self
    resultSearchController.searchBar.sizeToFit()
    resultSearchController.searchBar.delegate = self
    tableView.tableHeaderView = resultSearchController.searchBar

    /// Add refresh control
    refreshControl.attributedTitle = NSAttributedString(string: "Pull to refresh")
    refreshControl.addTarget(self, action: #selector(BigHeadViewController.refreshTable), forControlEvents: UIControlEvents.ValueChanged)
    tableView.addSubview(refreshControl)  

【问题讨论】:

【参考方案1】:

我认为问题可能出在第一行。您必须将“searchResultsController”指定为初始化的一部分——即使它是 nil (就地搜索)。试试

let resultSearchController = UISearchController(searchResultsController:nil)

【讨论】:

以上是关于以编程方式将 UISearchController 添加到 swift 2 中的 UITableView 标头的主要内容,如果未能解决你的问题,请参考以下文章

我可以用 UISearchController 以编程方式复制 UIStatusBar 上的点击操作吗?

以编程方式显示导航栏的 UISearchController

以编程方式自动布局到 UISearchController 选择它时消失

添加 UISearchController 并以编程方式使用约束对其进行定位

以编程方式显示 UISearchController 的搜索栏

以编程方式重置 UISearchController 中的搜索查询字符串