6

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

class EmployeesTableView: UITableViewController, NSFetchedResultsControllerDelegate,UISearchResultsUpdating{

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

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

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

4

3 回答 3

17

斯威夫特 3:

func updateSearchResults(for searchController: UISearchController) {

// code here

}
于 2016-09-03T14:50:46.393 回答
8

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

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

func updateSearchResultsForSearchController(searchController: UISearchController)

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

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

再举一个例子,命令 click on NSFechedResultsControllerDelegate。您会看到它没有必需的方法,但有很多可选的方法。此信息通常也可以在文档中找到,但我发现 command + click 是查找所需内容的最快方法。

于 2015-02-15T02:13:28.420 回答
6

斯威夫特 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!)
     }
}
于 2016-11-15T16:13:51.633 回答