两个视图控制器,避免意大利面

时间:2012-02-27 03:36:55

标签: objective-c xcode

我有2个视图控制器,第二个视图控制器需要更改第一个视图控制器中的标签。可以这样做的一种方法是使第一个视图控制器成为属性,以便第二个视图控制器可以直接更改它。

唯一的问题是它是意大利面条编程......如何在不陷入此陷阱的情况下实现这一目标?

我的一个想法是使用委托协议来执行此操作。如果有任何其他方式,请好奇。

2 个答案:

答案 0 :(得分:1)

对于执行诸如更改标签之类的小任务的简单应用程序,为视图控制器创建属性并不是很不受欢迎。随着应用程序的增长,或者您需要进行大量的标签更改,最好设置委托和协议来为您更改它们。这主要取决于你:如果你有一个团队或一个大型/不断增长的应用程序,你可能会考虑使用委托和协议,因为你可能会使用它们来进行良好的MVC和KVO实践。

答案 1 :(得分:0)

也许是因为我是一个相对的Objective C noob(虽然对编码并不陌生),但代表计划几乎总是似乎导致了一些拉长的意大利面给我 - 除了内置系统,如UITableViewController。

我最近需要创建一个系统来更新自定义tableview单元格上的标签,并发现使用NSNotification更加简单易懂。在新值出现的控制器中,我们发布通知:

[[NSNotificationCenter defaultCenter] postNotificationName: @"UpdatedDatesNotification" object: formattedDates];

...并且在创建包含标签的UITableViewCell的子类中,我们正在侦听该特定通知:

[[NSNotificationCenter defaultCenter] addObserver: self selector: @selector(updateDateDisplays:) name: @"UpdatedDatesNotification" object: nil];

...然后将“formattedDates”(在本例中)传递给方法“updateDateDisplays”。

我确信有一些会告诉你,这在某种程度上是错误的,但我会争辩说1)它用最少的代码完成工作2)它易于阅读和搜索3)它节省了一大堆很多时候,如果你以此为生,就是金钱。