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

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

class EmployeesTableView: UITableViewController, NSFetchedResultsControllerDelegate,UISearchResultsUpdating{

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

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

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

【问题讨论】:

  • 你有名为“CustomTableViewController”的类吗?

标签: swift ios8 uisearchcontroller


【解决方案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 是我错过的重要内容。不回答问题,但有帮助。感谢分享。
    猜你喜欢
    • 1970-01-01
    • 2023-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多