从子视图调用MainViewController方法

时间:2010-07-04 05:50:45

标签: objective-c iphone

我在MainViewController中添加了一个子视图。如何从子视图中调用MainViewController的方法?

2 个答案:

答案 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)

子视图控制器实现中的

import“urmainViewcontrollerclassname”

urmainViewcontrollerclassname *temp=(urmainViewcontrollerclassname*)self.parentViewController;

[temp mainVCFunction];

    //test with nslog in mainVCFunction.