如何使 UITableViewController 符合协议 UISearchResultsUpdating?

Posted

技术标签:

【中文标题】如何使 UITableViewController 符合协议 UISearchResultsUpdating?【英文标题】:How do I make a UITableViewController conform to protocol UISearchResultsUpdating? 【发布时间】:2015-02-15 02:02:25 【问题描述】:

我有一个UITableViewController 类,我正在其中实现UISearchController。我添加了以下代表:

class EmployeesTableView: UITableViewController, NSFetchedResultsControllerDelegate,UISearchResultsUpdating

我正在导入 UIKitCoreData。我收到以下错误:

"Type 'CustomTableViewController' does not conform to protocol UISearchResultsUpdating"

我需要做什么才能使控制器符合协议?

【问题讨论】:

你有名为“CustomTableViewController”的类吗? 【参考方案1】:

斯威夫特 3:

func updateSearchResults(for searchController: UISearchController) 

// code here


【讨论】:

How to answer - 发帖前请阅读。 嘿@AgataB,您的链接引用了不正确的 url - 应该是 How to answer 不确定问题出在哪里 - 为了使控制器符合协议,Swift 3 中所需方法的语法已按照上述更改。【参考方案2】:

将协议添加到类定义时,最简单的方法是将鼠标悬停在协议名称上并命令单击其名称。这将提升它的定义。对于协议定义,它们通常具有紧随其后的方法。如果一个方法是必需的,它将在顶部,如果它在前面有可选的,那么它不是必需的。

在 `UISearchResultsUpdating 的情况下,它只有一个方法并且是必需的。只需复制该方法或多个方法,然后单击返回箭头即可返回您的课程。将方法粘贴到您的类中,然后实现它们。如果它们是可选方法(在这种情况下没有可选方法),请从前面删除可选方法。这是我从定义中复制的。

func updateSearchResultsForSearchController(searchController: UISearchController)

然后你更新它来做你想做的事。

func updateSearchResultsForSearchController(searchController: UISearchController) 
    //do whatever with searchController here.

作为另一个示例,命令单击NSFechedResultsControllerDelegate。您会看到它没有必需的方法,但有很多可选的方法。这些信息通常也可以在文档中找到,但我发现 command + click 是查找所需内容的最快方法。

【讨论】:

【参考方案3】:

斯威夫特 3.0

//Make sure to import UIKit
import Foundation
import UIKit

class ViewController: UIViewController, UISearchBarDelegate 

     var searchController = UISearchController()

     override func viewDidLoad() 
          //Setup search bar
          searchController = UISearchController(searchResultsController: nil)
          searchController.dimsBackgroundDuringPresentation = false
          definesPresentationContext = true
          //Set delegate
          searchController.searchResultsUpdater = self
          //Add to top of table view
          tableView.tableHeaderView = searchController.searchBar
     

extension ViewController: UISearchResultsUpdating 
     func updateSearchResults(for searchController: UISearchController) 
          print(searchController.searchBar.text!)
     

【讨论】:

definesPresentationContext = true 是我错过的重要内容。不回答问题,但有帮助。感谢分享。

以上是关于如何使 UITableViewController 符合协议 UISearchResultsUpdating?的主要内容,如果未能解决你的问题,请参考以下文章

如何使页脚视图始终位于 UITableViewController 的底部?

如何使 iCarousel 与 UITableViewController 中的 headerView 一起工作

当我们使用 UITableViewController 的子类处理表委托时,如何使 viewWillAppear 被调用?

我有一个显示 UIActionSheet 的 UITableViewController,如何使操作表选项显示模式视图?

使用 UITableViewController 使视图保持底部

UITableViewController - 禁用选择