2015-02-15 11 views
5

Tôi có một lớp học UITableViewController mà tôi đang triển khai UISearchController. Tôi đã thêm các đại biểu sau đây:Làm cách nào để tạo UITableViewController tuân theo giao thức UISearchResultsUpdating?

class EmployeesTableView: UITableViewController, NSFetchedResultsControllerDelegate,UISearchResultsUpdating{ 

tôi nhập khẩu cả UIKitCoreData. Tôi nhận được lỗi sau:

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

Tôi cần làm gì để làm cho bộ điều khiển tuân theo giao thức?

+0

Bạn có lớp có tên là "CustomTableViewController"? – gagarwal

Trả lời

8

Khi bạn thêm giao thức vào định nghĩa lớp, cách dễ nhất là di chuột qua tên giao thức và lệnh nhấp vào tên của giao thức. Điều này sẽ kéo lên định nghĩa của nó. Với định nghĩa giao thức, chúng thường có phương thức ngay lập tức theo chúng. Nếu một phương pháp được yêu cầu, nó sẽ ở trên cùng, nếu nó có tùy chọn ở phía trước, thì nó không được yêu cầu để phù hợp.

Trong trường hợp `UISearchResultsUpdating, nó chỉ có một phương thức và nó là bắt buộc. Chỉ cần sao chép phương thức hoặc nhiều phương thức và nhấp vào mũi tên quay lại để quay lại lớp học của bạn. Dán các phương thức vào lớp của bạn và triển khai chúng. Nếu chúng là phương pháp tùy chọn (trong trường hợp này không có phương pháp tùy chọn), hãy xóa tùy chọn khỏi mặt trước. Đây là những gì tôi đã sao chép từ định nghĩa.

func updateSearchResultsForSearchController(searchController: UISearchController) 

Sau đó, bạn cập nhật để thực hiện những gì bạn muốn làm.

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

Ví dụ bổ sung, nhấp chuột vào NSFechedResultsControllerDelegate. Bạn sẽ thấy rằng nó không có phương pháp bắt buộc, nhưng rất nhiều phương thức tùy chọn. Thông tin này thường được tìm thấy trong tài liệu, nhưng tôi đã tìm thấy lệnh + nhấp chuột để là cách nhanh nhất để tìm thấy những gì tôi đang tìm kiếm.

17

Swift 3:

func updateSearchResults(for searchController: UISearchController) { 

// code here 

} 
+0

[Cách trả lời] (http://stackoverflow.com/help/how-to-nswer) - vui lòng đọc nó trước khi đăng. – AgataB

+0

Hey @AgataB, liên kết của bạn tham chiếu đến url không chính xác - phải là [Cách trả lời] (http://stackoverflow.com/help/how-to-answer) –

+2

Không chắc chắn vấn đề ở đâu - để làm cho bộ điều khiển phù hợp với giao thức, cú pháp cho phương thức được yêu cầu trong Swift 3 đã thay đổi theo như trên. –

5

Swift 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!) 
    } 
} 
Các vấn đề liên quan