我想在另一个视图控制器对象中访问视图控制器数据成员变量的值。
或者是否可以访问其控件,如UILabel文本属性?
答案 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)出现:你自己。