옵션 A
그것은 빠르고, 쉽게,하지만 SecondaryViewController 아무것도 호출 귀찮게 할 필요가 없다는에는 계약이 없기 때문에, 유지 보수성이 부족하고, self.parentViewController 어떤의 UIViewController 수 있습니다.
옵션 B
대리자 패턴; 이것은 나의 취향이고, 무슨 일이 일어나고 있는지, 필요한 것이 무엇인지, 그리고 당신이 나를 초기화하고 싶다면 나에게 대의원을 제공하는 좋은 단서가있다.
옵션 C
SecondaryViewController는 여러 개체를 통지하는 경우, NSNotificationCenter를 사용하여 빠른 것이지만, 옵션 A와 마찬가지로, 어떠한 계약도 없다, 당신은 당신이 기억해야 할, 많은 개체에 통보해야한다 이러한 개체에서 알림을 수신하도록 -이 문제는 아니기 때문에, 나는 세부 사항으로 가지 않을 것이다, 그렇게 같은 일을 할,
옵션 MainViewController.m 년 내의
정보에 대한 바로 여기 :
SecondaryViewController *viewcontroller = [[SecondaryViewController alloc] initWithNibName:@"SecondaryView" bundle:nil];
[self addChildViewController:viewcontroller];
//set viewcontroller.view frame
[self.view addSubview:viewcontroller.view];
[viewcontroller didMoveToParentViewController:self];
내부 MainViewController.h
-(void) performButtonClickAction;
내부 MainViewController.m :
-(void) performButtonClickAction {
//Do something constructive
}
다음 SecondaryViewController.m 내부 :
-(IBAction) buttonPressed:(id) sender {
[self.parentViewController performButtonClickAction];
}
옵션 B
,내부 SecondaryViewController.h
@protocol SecondaryViewControllerDelegate <NSObject>
-(void) eventAFromViewController:(UIViewController *) viewController;
-(void) eventBFromViewController:(UIViewController *) viewController;
@end
@interface SecondaryViewController : UIViewController {
id<SecondaryViewControllerDelegate> delegate;
}
@property (assign, nonatomic) id<SecondaryViewControllerDelegate> delegate;
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil delegate:(id<SecondaryViewControllerDelegate>) theDelegate;
@end
내부 SecondaryViewController.m @synthesize 대리자 = _delegate; 이에 시간을 낭비
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil delegate:(id<SecondaryViewControllerDelegate>) theDelegate
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
self.delegate = theDelegate;
}
return self;
}
-(IBAction) buttonPressed:(id) sender {
if(self.delegate != nil) {
[_delegate eventAFromViewController:self];
}
else {
//No delegate
}
}
을 보상해야한다. 감사 –
대상에서 옵션 B를 사용하는 경우 –