我在MainViewController中添加了一个子视图。如何从子视图中调用MainViewController的方法?
答案 0 :(得分:1)
作为MVC的一般代码修饰策略的一部分,视图不应该知道控制器。 (谷歌是你的朋友,如果你不了解MVC,那很重要。)如果你想要与视图的交互传递给控制器,你应该制作一个委托协议,创建一个委托接口,在控制器中实现它,并将控制器连接到界面构建器中的视图委托。这可能听起来很多,所以这是一个例子:
假设我们有一个CalendarView,我们想告诉控制器何时有人点击日期,并询问我们是否应该选择日期:
1)制定代表协议
@protocol CalendarViewDelegate
- (BOOL)shouldSelectDate:(NSDate *)tappedDate;
@end
2)将一个(非保留!)委托属性添加到CalendarView,作为IBOutlet
@interface CalendarView : UIView
...
@property IBOutlet id<CalendarViewDelegate> delegate;
@end
3)在你需要的任何一个控制器中实现CalendarViewDelegate
<强> MainViewController.h:强>
@interface MainViewController<CalendarViewDelegate> : UIView
<强> MainViewController.m:强>
@implementation MainViewController
...
- (BOOL)shouldSelectDate:(NSDate *)tappedDate {
//Whatever logic you want here
//the view should only be doing UI stuff, everything else goes here
}
@end
答案 1 :(得分:0)
urmainViewcontrollerclassname *temp=(urmainViewcontrollerclassname*)self.parentViewController;
[temp mainVCFunction];
//test with nslog in mainVCFunction.