如何访问其他视图控制器数据成员变量?

时间:2009-09-04 15:22:46

标签: iphone

我想在另一个视图控制器对象中访问视图控制器数据成员变量的值。

或者是否可以访问其控件,如UILabel文本属性?

4 个答案:

答案 0 :(得分:1)

可以访问另一个视图控制器的UILabel,但不能。它会引导你很难理解错误。当内存不足时,任何IBOutlet都会在令人惊讶的时候变为零。你不应该直接混淆另一个对象的UI元素。

您访问数据(模型)对象的初步想法是正确的,但通常您最好只使用相同的模型对象初始化两个视图控制器。例如,假设您有一个状态消息,您希望在两个不同的视图控制器中显示两个不同的UILabel。而不是让一个视图控制器向另一个视图控制器询问数据,最好有一个像“Status”这样的模型类,两个视图都有一个指针。每当它发生变化时,都会改变它们的UILabel。

更好的方法是发布通知(StatusDidChangeNotification),让关心的每个人都观察它并适当更新他们的用户界面。

您希望在Cocoa中保持UI元素的松散耦合。否则,当您进行看似微小的UI更改时,最终会遇到难以修复的错误。

答案 1 :(得分:1)

很多时候,当我发现我必须做这样的事情时,我发现我可以重新设计解决方案,并且它的需求消失了。杰伊定律:“如果它太难了,你可能做错了。”

答案 2 :(得分:0)

您将不得不在视图控制器界面中定义属性,然后只要您在第二个视图控制器中引用视图控制器,就应该能够像UILabel的文本一样访问它。

答案 3 :(得分:0)

viewWillAppear:只有在使用内置视图控制器转换时才会调用框架,如presentModalViewController:animated:或pushViewController:animated:。在其他情况下,你必须调用viewWill / Did(Dis)出现:你自己。