UISearchResultsUpdating不符合视图控制器中的扩展类

问题描述 投票:1回答:1

我正在尝试获得类似instagrams探索页面的示例,例如here(图片太大,无法将其添加到帖子中)。我有一个explorer viewController,它的顶部有一个搜索栏,而在搜索栏下方是内容的集合视图,每当用户单击搜索栏时,它将转到我的搜索表视图控制器类,反之亦然。

这是我的普通搜索视图控制器(显示内容的主要控制器):

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
}
}

这是我的搜索表视图控制器:

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 { $0.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类。错误为Cannot assign value of type 'SearchTableViewController.Type' to type 'UISearchResultsUpdating?'。我的SearchTableViewController在类的扩展中具有UISearchResultsUpdating委托,我不知道我哪里出错了?我正在尝试通过这种设计实现Pete's answer之类的东西:

enter image description here

显然没有标签导航栏。

ios swift delegates uisearchcontroller
1个回答
0
投票

我认为使用System UITableView应该不可能。由于这些原因,屏幕需要大量自定义,并且需要在自动布局中设置已开发的屏幕。我附加了一些示例git repo链接,希望对您有所帮助。https://github.com/Nilomi/InstagramLayout我的建议使用UICollectionview而不是UITableview。

© www.soinside.com 2019 - 2024. All rights reserved.