如何在一个 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 数据?的主要内容,如果未能解决你的问题,请参考以下文章

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

如何在使用它的 ViewController 上调整自定义(在单独的文件中创建)UIView 高度?

如何在 ViewController 及其 NavigationController 上添加 UIview

如何通过同一个 ViewController(在故事板上创建)在两个视图(在 xib 上创建)之间切换?

如何在一个 ViewController 中打开多个文件?

如何在自身或另一个 viewController 上运行 segue