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

Iphone 如何使用tableView作为选择器将值发送到另一个viewcontroller?,iphone,tableview,viewcontroller,Iphone,Tableview,Viewcontroller,我会尽可能地解释这一点,但如果它变得太混乱,我会道歉——我已经在这个问题上纠缠了好几个小时了 在我的应用程序中,我有一个搜索屏幕,用户可以在其中选择一组标准来执行搜索。其中一些标准由相当长的可供选择的值列表组成,因此我希望在搜索屏幕上有一个表视图,它有4行,每行代表用户可以设置的标准。 一旦用户单击一行,我想在我的navigationcontroller中推送一个新窗口,该窗口由一个新表组成,其中包含该条件的可选值。一旦用户在新窗口中单击其中一行,我想将所选值发送回我的主搜索屏幕并弹出回我的搜索

我会尽可能地解释这一点,但如果它变得太混乱,我会道歉——我已经在这个问题上纠缠了好几个小时了

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

最好的方法是什么

精化:

我的searchscreen称为SearchViewController,包含在navigationController中。 SearchViewController包含两个滑块和一个具有4行的tableView,分别称为“Searchtype”、“Property type”、“Salestype”、“Area”和一个searchbutton。如果用户单击“Searchtype”,则我希望在navigationController中推送一个新视图,该视图应包含一个新的tableView,其中一组行表示“Searchtype”条件的不同可能值-SearchViewController中的所有4行也是如此。 当用户单击新推送的tableView中的一个值行时,我希望该tableView弹出,并将所选值发送回SearchViewController,允许用户选择更多标准或按下搜索按钮以根据所选标准实际执行搜索

但我想不出最好的办法? 我真的很感激能得到的任何帮助——我想弄明白这一点,快发疯了:)

顺便说一句,我不使用界面生成器-所有UI元素都是手动编码的

5种方法:

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

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

3) 如上所述,在viewwillbeen:中实现“刷新”功能,但不建议这样做,因为viewwillbeen:的实现很糟糕,而且根本不可靠。也许对于简单的应用程序来说是好的,但是当你的应用程序的结构变得复杂的时候,忘记它吧

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

5) 类似地,您可以使用核心数据将所有搜索条件存储在对象中,并使用KVO侦听该对象中的更改。这有点高级,可能有些过火,但如果您了解KVO,它会使Objective C中的工作更轻松,因此可能值得一看


顺便说一句:首先,通过手工编写所有UI来理解这些概念是很好的,但是只要有可能,就尝试使用Interface Builder。这是一种非常推荐的工作方式(在Stackoverflow或web上有无数关于这方面的帖子,其中有关于为什么IB更好的详细讨论)。

非常感谢-非常感谢学习时提供的所有帮助:)您是否有机会获得一些关于IB vs manual UI主题的更好文章的链接?Jeff La Marche(iPhone dev imo最好的博主之一)对此有一篇很好的帖子:。但要注意,Interface Builder的学习曲线非常陡峭,一开始可能会非常混乱,但不要轻易放弃。如果你打算在iPhone(或Mac)上工作我认为IB是一个很棒的工具,绝对值得使用!我必须承认我感觉不错,因为一年前,捷克共和国的每个人都在谈论IB的性能问题,关于开发的复杂性增加,关于“真正的人在代码中做UI”等等-现在,它被证明只是一个虚假的谈话。。。