1

我会尽力解释这一点,但如果它变得太混乱,我很抱歉 - 我已经被这个问题困住了好几个小时了。

在我的应用程序中,我有一个搜索屏幕,用户可以在其中选择一堆标准来执行搜索。其中一些标准包含相当长的值列表可供选择,因此我希望在我的搜索屏幕上有一个表格视图,它有 4 行 - 每行代表用户可以设置的标准。一旦用户单击一行,我想在我的导航控制器中推送一个新窗口,该窗口由一个包含该条件的可选值的新表组成 - 一旦用户单击新窗口上的这些行之一,我想要选定的值发送回我的主搜索屏幕并弹回我的搜索屏幕。

最好的方法是什么?

阐述:

我的 searchscreen 称为 SearchViewController 并包含在一个 navigationController 中。SearchViewController 包含两个滑块和一个带有 4 行的 tableView,分别称为“Searchtype”、“Property type”、“Salestype”、“Area”和一个 searchbutton。如果用户单击“Searchtype”,那么我希望在 navigationController 中推送一个新视图,该视图应该包含一个新的 tableView,其中有一堆代表“Searchtype”标准的不同可能值的行 - 这同样适用于所有 4 行搜索视图控制器。

但我想不出最好的方法来做到这一点?我真的很感谢我能得到的任何帮助——我想弄清楚这一点我疯了:)

顺便提一句。我不使用 Interface Builder - 所有 UI 元素都是手动编码的。

在此处输入图像描述

4

1 回答 1

3

这里有 5 种方法:

1) 让 Search View Controller 成为 Search Type View Controller 中的 action 的委托,这样当用户选择一个搜索类型时,就会得到通知。如果需要,请在编译时使用协议进行正确检查,并记住对委托使用分配而不是保留,以避免循环引用。

2) 将 UINavigationController 委托设置为 Search View Controller(或您想要控制它的任何类),并在弹出 Search Type View Controller 时监听事件。

3) 在 vi​​ewWillAppear: 中实现一个“刷新”功能,如上所述,但不建议这样做,因为 viewWillAppear: 的实现很烂而且根本不可靠。也许对简单的应用程序有好处,但是当你的应用程序的结构变得复杂时,忘记它。

4) 使用 NSNotificationCenter。您的搜索视图控制器将观察搜索条件的所有更改,并在每个子视图控制器中,当用户更改它时,发布通知。这比上述所有方法更复杂,但更强大和灵活。

5) 同样,您可以使用 Core Data 将所有搜索条件存储在一个对象中,并使用 KVO 监听该对象的变化。这有点高级,可能有点矫枉过正,但如果你知道 KVO,它会让 Objective C 中的生活变得更容易,所以无论如何可能值得一看。

顺便说一句:首先通过手动编码来完成所有 UI 以理解概念是很好的,但尽可能尝试迁移到 Interface Builder。这是一种非常推荐的工作方式(Stackoverflow 或网络上有无数的线程,更详细地讨论了为什么 IB 更好)。

于 2011-02-06T13:35:11.673 回答