我还没想到:我有一个mainViewController可以切换两个视图,viewControllerA和ViewControllerB。我切换视图的方法是在mainViewController中使用UIButton(mainButton),然后单击它切换viewControllerA< - > ViewControllerB。
现在这是我的问题。我的ViewControllerA有一个UIButton(ButtonA)。我希望通过点击它,它告诉mainViewController切换到另一个视图(viewControllerB)
换句话说,子视图(viewControllerA)应该向mainViewController(它的父视图)发送一条消息,它想要触发属于主视图的方法,而不是它自己(viewA)。
我怎么能实现这一目标?
答案 0 :(得分:15)
与父对象的通信时,您可以选择一些设计模式。授权和通知都是不错的选择。
这里的重要思想是松散耦合的沟通。通知使用Singleton来处理通信,而委托使用对父对象的弱引用。 (查看Cocoa With Love:retain cycles)
如果你使用委托,你可以为你的ViewControllerA创建一个非正式的协议,MainViewController必须遵守该协议。
您可以将其称为ViewControllerADelegate协议:
@protocol ViewControllerADelegate
@optional
- (void)bringSubViewControllerToFront:(UIViewController*)aController;
@end
或者ViewControllerA可以发布通知:
[[NSNotificationCenter defaultCenter] postNotificationName:@"MyFunkyViewSwitcherooNotification" object:self];
如果MainViewController想要知道,那么它应该是持久的:
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(swapThoseViews:) name:@"MyFunkyViewSwitcherooNotification" object:nil];
答案 1 :(得分:0)
有几种方法可以实现这一目标: 看看这里的协议http://developer.apple.com/iphone/library/documentation/Cocoa/Conceptual/ObjectiveC/Articles/ocProtocols.html,还看一下在一些苹果示例项目中使用的RootViewController,这里的Metronome http://developer.apple.com/iphone/library/samplecode/Metronome/正在使用它来从主视图切换到首选项视图。在View COntroller编程指南http://developer.apple.com/iphone/library/featuredarticles/ViewControllerPGforiPhoneOS/PresentingModelViewControllers/PresentingModelViewControllers.html中查看模态视图控制器及其交互,您还可以在此处查看答案Switch between 3 or more views