如何使用tableView作为选择器将值发送到另一个viewcontroller?

问题描述:

我会尽我所能解释这一点,但我很抱歉,如果它变得太混乱 - 我一直被困在这个问题上好几个小时了。如何使用tableView作为选择器将值发送到另一个viewcontroller?

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

这样做的最好方法是什么?

阐述:

我searchscreen被称为SearchViewController并包含在一个navigationController。 SearchViewController包含两个滑块和一个名为“Searchtype”,“Property type”,“Salestype”,“Area”和一个searchbutton的4行的tableView。如果用户点击“搜索类型”,那么我想要一个新的视图被推入导航控制器应该包含一个新的tableView与一堆行代表不同的可能值为“搜索类型”标准 - 所有4行同样SearchViewController。 当用户点击新推送的tableView中的某个值行时,我希望该tableView被弹出,并将选定的值发送回SearchViewController,以允许用户选择更多的标准或推动搜索按钮以实际执行根据选定的标准进行搜索。

但我找不出最好的方法来做到这一点? 我真的很感激任何帮助,我可以得到 - 我要坚持试图找出这个:)

Btw。我不使用Interface Builder - 所有UI元素都是手动编码的。

enter image description here

5种方法来写:

1)让搜索视图控制器是在搜索类型视图控制器行动的代表,这样,当用户选择搜索类型,将被通知。如果需要,请在编译时使用协议进行适当检查,并记住为委托使用assign而不是retain,以避免循环引用。

2)将UINavigationController委托设置为Search View Controller(或任何想控制它的类),并在搜索类型视图控制器弹出时监听事件。

3)实现viewWillAppear中一个“刷新”功能:按照以上建议,但不建议这样做,因为viewWillAppear中执行:吮吸和不可靠的。也许对简单的应用程序很好,但是当你的应用程序的结构变得复杂时,忘记它。

4)使用NSNotificationCenter。您的搜索视图控制器将遵守对搜索条件的所有更改,并且在每个子视图控制器中,当用户更改时,发布通知。这更复杂,但比上述所有方法更加强大和灵活。5)同样,您可以使用核心数据将所有搜索条件存储在对象中,并使用KVO监听该对象中的更改。这有点高级,可能会过度杀伤,但是如果你知道KVO,它会让Objective C的生活变得更容易,所以无论如何可能值得一看。

顺便说一句:最好先手动编写所有的UI来理解概念,但是尽可能地尝试移动到Interface Builder。这是一个非常值得推荐的工作方式(在*或Web上有无数的线程,更详细的讨论为什么IB更好)。

+0

非常感谢 - 真的很感谢所有的帮助,而学习:) – Milk78 2011-02-06 13:50:53