UISearchResultsUpdating 不符合视图控制器中的扩展 class
UISearchResultsUpdating not conforming to extension class in view controller
我正在尝试获取类似 instagrams 探索页面的内容,例如 here(图片太大,无法将其添加到 post)。我有一个探索 viewController,顶部有一个搜索栏,搜索栏下方有一个内容集合视图,只要用户单击搜索栏,它就会转到我的搜索 table 视图控制器 class 这会为他们提供与他们的查询匹配的用户结果,反之亦然。
这是我的普通搜索视图控制器(显示内容的主要视图控制器):
import UIKit
class SearchViewController: UIViewController {
@IBOutlet weak var searchBar: UISearchBar!
override func viewDidLoad() {
super.viewDidLoad()
let storyboard = UIStoryboard(name: "Main", bundle: nil)
guard let SearchResultsViewController = storyboard.instantiateViewController(withIdentifier: "SearchResultsViewController") as? SearchTableViewController else { return}
let searchController = UISearchController(searchResultsController: SearchResultsViewController)
searchController.searchResultsUpdater = SearchTableViewController // ERROR HERE
view.addSubview(searchController.searchBar)
definesPresentationContext = true
}
}
这是我的搜索 table 视图控制器:
class SearchTableViewController: UIViewController {
let languages = ["Mandarin Chinese", "English", "Hindustani", "Spanish", "Arabic", "Malay", "Russian", "Bengali", "Portuguese", "French", "Hausa", "Punjabi", "German", "Japanese", "Persian", "Swahili", "Telugu", "Javanese", "Wu Chinese", "Korean"]
var searchResults: [String] = []
@IBOutlet weak var tableView: UITableView!
override func viewDidLoad() {
super.viewDidLoad()
tableView.dataSource = self
}
}
extension SearchTableViewController: UISearchResultsUpdating {
func updateSearchResults(for searchController: UISearchController) {
guard let searchText = searchController.searchBar.text else { return }
searchResults = languages.filter { [=12=].contains(searchText) }
tableView.reloadData()
}
}
extension SearchTableViewController: UITableViewDataSource {
func numberOfSections(in tableView: UITableView) -> Int {
return 1
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return searchResults.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "searchCell", for: indexPath)
let language = searchResults[indexPath.row]
cell.textLabel?.text = language
return cell
}
}
目前我一直在调用 searchResultsUpdating
class。错误 Cannot assign value of type 'SearchTableViewController.Type' to type 'UISearchResultsUpdating?'
。我的SearchTableViewController
在class的extension里有UISearchResultsUpdating
delegate,不知道哪里出错了?我正在尝试通过这种设计实现类似 的效果:
显然没有标签导航栏。
您不需要 SearchTableViewController
的实例吗?
您正在尝试分配 class 类型而不是此处的实例:
searchController.searchResultsUpdater = SearchTableViewController
您需要初始化 SearchTableViewcontroller 或引用其实例以设置为 searchResultsUpdater
我正在尝试获取类似 instagrams 探索页面的内容,例如 here(图片太大,无法将其添加到 post)。我有一个探索 viewController,顶部有一个搜索栏,搜索栏下方有一个内容集合视图,只要用户单击搜索栏,它就会转到我的搜索 table 视图控制器 class 这会为他们提供与他们的查询匹配的用户结果,反之亦然。
这是我的普通搜索视图控制器(显示内容的主要视图控制器):
import UIKit
class SearchViewController: UIViewController {
@IBOutlet weak var searchBar: UISearchBar!
override func viewDidLoad() {
super.viewDidLoad()
let storyboard = UIStoryboard(name: "Main", bundle: nil)
guard let SearchResultsViewController = storyboard.instantiateViewController(withIdentifier: "SearchResultsViewController") as? SearchTableViewController else { return}
let searchController = UISearchController(searchResultsController: SearchResultsViewController)
searchController.searchResultsUpdater = SearchTableViewController // ERROR HERE
view.addSubview(searchController.searchBar)
definesPresentationContext = true
}
}
这是我的搜索 table 视图控制器:
class SearchTableViewController: UIViewController {
let languages = ["Mandarin Chinese", "English", "Hindustani", "Spanish", "Arabic", "Malay", "Russian", "Bengali", "Portuguese", "French", "Hausa", "Punjabi", "German", "Japanese", "Persian", "Swahili", "Telugu", "Javanese", "Wu Chinese", "Korean"]
var searchResults: [String] = []
@IBOutlet weak var tableView: UITableView!
override func viewDidLoad() {
super.viewDidLoad()
tableView.dataSource = self
}
}
extension SearchTableViewController: UISearchResultsUpdating {
func updateSearchResults(for searchController: UISearchController) {
guard let searchText = searchController.searchBar.text else { return }
searchResults = languages.filter { [=12=].contains(searchText) }
tableView.reloadData()
}
}
extension SearchTableViewController: UITableViewDataSource {
func numberOfSections(in tableView: UITableView) -> Int {
return 1
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return searchResults.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "searchCell", for: indexPath)
let language = searchResults[indexPath.row]
cell.textLabel?.text = language
return cell
}
}
目前我一直在调用 searchResultsUpdating
class。错误 Cannot assign value of type 'SearchTableViewController.Type' to type 'UISearchResultsUpdating?'
。我的SearchTableViewController
在class的extension里有UISearchResultsUpdating
delegate,不知道哪里出错了?我正在尝试通过这种设计实现类似
显然没有标签导航栏。
您不需要 SearchTableViewController
的实例吗?
您正在尝试分配 class 类型而不是此处的实例:
searchController.searchResultsUpdater = SearchTableViewController
您需要初始化 SearchTableViewcontroller 或引用其实例以设置为 searchResultsUpdater