gpt4 book ai didi

ios - 使搜索栏通知 viewController 用户即将搜索

转载 作者:行者123 更新时间:2023-12-01 18:37:01 28 4
gpt4 key购买 nike

我正在我的应用程序中实现搜索功能。该应用程序由一个 View Controller 和一个处理搜索逻辑的自定义类组成。此自定义类称为 SearchController .

我的目标是让 searchBar 在用户即将开始搜索时通知 View Controller (与 UISearchBarDelegate 方法 searchBarShouldBeginEditing 完全相同的行为)。

通常,您只需声明 searchBarShouldBeginEditing里面 SearchController但我试图从 viewController 内部调用此方法因为我希望在发生此事件时更改 View 中的某些内容(因此应该由 viewController 处理它,而不是 searchController)。
SearchController类(class):

class SearchController: NSObject, UISearchBarDelegate {

let searchBar = UISearchBar()
var searchButton = UIBarButtonItem? = nil

/* Other irrelevant class properties */

func setup() {
searchBar.delegate = self
/* other setup */
}
}
ViewController类(class):
class ViewController: UIViewController {

private let searchController = SearchController()

override func viewDidLoad() {
super.viewDidLoad()

searchController.delegate = self
searchController.setup()
}

/* setup a tableview to display results... this part of the implementation works fine */
}

我省略了这两个类中的大部分,因为搜索功能已经可以使用。我唯一苦苦挣扎的就是找到一种方法让 viewController知道用户何时将开始在搜索字段中输入内容。

我试着制作 viewController实现 UISearchBarDelegate但我已经在制作 SearchController实现 UISearchBarDelegate那么为什么我不能访问 viewController 中的委托(delegate)方法? ?

我希望我说清楚了,如有必要,我可以进一步澄清这篇文章。我一直在扯头发,试图自己解决这个问题。

最佳答案

好的,一个 searchBar不能有 2 个代表,所以你必须想办法解决这个问题。

解决此问题的一种方法是:

protocol SearchControllerDelegate: class{
func searchBarDidBeginEditing()
}

class SearchController: NSObject, UISearchBarDelegate {

weak var delegate: SearchControllerDelegate?

private let searchBar = UISearchBar()

func setup() {
searchBar.delegate = self
}

func searchBarTextDidBeginEditing(_ searchBar: UISearchBar) {
delegate?.searchBarDidBeginEditing()
}

}

class ViewController: UIViewController, SearchControllerDelegate{

var searchController = SearchController()
func setUP(){
self.searchController.delegate = self
}

func searchBarDidBeginEditing() {
/// perform some action here
}

}

关于ios - 使搜索栏通知 viewController 用户即将搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52490177/

28 4 0