如何在一个 viewController 上使用多个搜索栏来访问 Swift 中的不同 JSON 数据?

Posted

技术标签:

【中文标题】如何在一个 viewController 上使用多个搜索栏来访问 Swift 中的不同 JSON 数据?【英文标题】:How to use multiple search bars on one viewController to access different JSON data in Swift? 【发布时间】:2015-09-14 19:01:08 【问题描述】:

我有一个 viewController,上面有 3 个不同的搜索栏,每个搜索栏旁边都有一个按钮。三个搜索栏用于不同的类别(即电影、电视节目),当您按下它旁边的按钮时,它假设根据在搜索字段中输入的内容随机找到一个项目。如果视图控制器中只有一个搜索栏通过将数据附加到数组,我知道如何单独访问 JSON 数据,但如果同一视图控制器上有多个搜索栏则不知道。

【问题讨论】:

对不起,我不能给你正确的答案,因为它被某个人否决了......所以必须继续搜索,或者问选民他的问题是什么: -) 【参考方案1】:

到目前为止,最好的选择是为每个搜索栏设置独立的委托对象。

第二种选择是将三个搜索栏中的每一个保存在它自己的属性上,在委托方法中进行区分,如

if searchBar == self.moviesSearchBar 
    //
 else if searchBar == self.tvshowSearchBar
    //

另一种选择是重新考虑 UI,只有一个 searchBar 和一个分段控件来切换搜索范围。

【讨论】:

感谢您的回答,但是如何在同一个 viewController 上拥有多个独立的 UISearchBarDelegates? 它不必在视图控制器上。实际上这是一个不会消失的坏习惯(也因为苹果的示例代码没有强调它,而是作为架构的蓝图)。最重要的架构原则是SOLID principles。实现委托和数据源违反了其中的几个,最重要的是Single Responsibility Principle。 搜索“ios 海量视图控制器”了解更多关于此主题的信息。【参考方案2】:

简答:使用标签属性(整数)来识别每一个。

长答案:

你可以通过 1) Interface Builder 的 View 部分。见图。 2) 以编程方式 yourSearchBar.tag =

然后,使用 UISearchBarDelegate 的 func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) searchBar 参数来确定哪个搜索栏触发了委托调用。

确实,您应该尽可能遵循 SOLID 原则。

【讨论】:

以上是关于如何在一个 viewController 上使用多个搜索栏来访问 Swift 中的不同 JSON 数据?的主要内容,如果未能解决你的问题,请参考以下文章