Iphone 请注意,视图是从viewController外部加载的

Iphone 请注意,视图是从viewController外部加载的,iphone,objective-c,ios,uiviewcontroller,aop,Iphone,Objective C,Ios,Uiviewcontroller,Aop,任何帮助都将不胜感激 我正在寻找一种方法,以编程方式通知从viewController外部加载视图 假设我的主视图有5个按钮,在加载视图并显示按钮后,我希望在另一个文件(viewContrller之外)中通知它已加载。如何/在何处检查此信息并获得通知 我需要做一些面向方面的编程吗?使用NSNotificationCenter。您可以在类之间通信。侦听其他对象中的自定义NSNotification。让您的视图控制器在其生命周期中最有意义的部分发布该通知(viewDidLoad、ViewDidDis

任何帮助都将不胜感激


我正在寻找一种方法,以编程方式通知从viewController外部加载视图

假设我的主视图有5个按钮,在加载视图并显示按钮后,我希望在另一个文件(viewContrller之外)中通知它已加载。如何/在何处检查此信息并获得通知


我需要做一些面向方面的编程吗?

使用NSNotificationCenter。您可以在类之间通信。

侦听其他对象中的自定义NSNotification。让您的视图控制器在其生命周期中最有意义的部分发布该通知(viewDidLoad、ViewDidDisplay…)

如果您不能发布通知,那么观察密钥路径可能是一种方法。例如,您可以在控件对象中放置类似的内容,然后实现
observeValueForKeyPath:

[viewController addObserver:self
                 forKeyPath:@"view"
                    options:NSKeyValueObservingOptionNew
                    context:NULL];

NSNotificationCenter或委托方法是实现这一点的最合适的方法。

虽然您可以像其他人建议的那样使用通知或KVO来实现这一点,但这强烈表明存在设计问题。决不能直接访问视图控制器的内部视图。所以更深层次的问题是:你为什么想知道


根据我的经验,最可能的原因是您让其他对象设置标题或启用修改。这会破坏MVC,并导致您可能正试图解决的问题。处理此问题的正确方法是将数据放入在各个视图控制器之间共享的模型对象中。然后,当前视图控制器可以观察模型上的更改,并适当更新其UI元素。

这是否可能不在该视图控制器的源代码中添加/更改任何内容。我要跟踪的所有代码更改都应该在控制文件中的viewController外部进行编码。您可以使控制对象成为另一个对象内部属性更改的观察者。我更新了我的答案,并给出了解释。我正在寻找一种方法,通过编程通知从viewController外部加载视图。我知道要在类之间进行通信,我可以使用NSNotificationCenter,或者使用委托方法或标记视图等,但我不想更改视图控制器源代码中的任何内容。我想让我们说一些像图书馆或框架这样的东西来从外部管理这个。到目前为止,我所有的搜索都没有什么帮助,似乎Objective-C中有一些面向方面的编程,我可能需要查看。您能解释一下为什么要访问视图控制器的私有信息(视图,视图由视图控制器单独负责管理)?打破MVC会让你吃不下可可。这里使用的工具是KVO(键值观察),但它强烈地暗示了一个设计问题。