티스토리 뷰

- 부모 뷰 컨트롤러 : ParentViewController
- 자식 뷰 컨트롤러 : ChildViewController
로 정의하고 시작.
  1. 부모에 delegate @protocol 선언
  2. 자식에서 같은 @protocol 코딩
  3. 자식에서 부모에서 선언한 delegate 따른다고 선언
  4. 자식에서 해당 delegate를 통하여 부모의 object 제어

ParentViewController.h :
#import <UIKit/UIKit.h>

@protocol ParentViewDelegate
    - (void)didReceiveMesssge:(NSString *)message;
@end

@interface ParentViewController : UIViewController <parentViewDelegate>

@property (nonatomic, retain) IBOutlet UILabel *myMessage;

-(IBAction)showChildWithDelegate:(id)sender;

@end

ParentViewController.m :
#import "ParentViewController.h"
#import "ChildViewController.h"
......
// 모달 창 띄우기
-(IBAction)showChildWithDelegate:(id)sender {
    ChildViewController *childView = [[[ChildViewController alloc] init] autorelease];
    childView.delegate = self;
    [self presentModalViewController:childView animated:YES];
}

// 자식창으로부터 받은 값 셋팅
- (void)didReceiveMessage: (NSString *)message {
    myMessage.text = message;
}
......

ChildViewController.h :
#import <UIKit/UIKit.h>

@protocol ParentViewDelegate;

@interface ChildViewController : UIViewController {
    id<parentViewDelegate> delegate;
    UIButton *closeButton;
}

@property (nonatomic, assign) id<parentViewDelegate> delegate;
@property (nonatomic, retain) IBOutlet UIButton *closeButton;

- (IBAction)closeView:(id)sender;

@end

ChildViewController.m :
#import "ChildViewController.h"
#import "ParentViewController.h"

@synthesize closeButton;
@synthesize delegate;

- (IBAction)closeView:(id)sender {
    // delegate 통하여 부모에서 선언한 메쏘드에 메세지 전달
    [delegate didReceiveMessage:@"Hello World"];
    // 자신(자식창) 닫기
    [self dismissModalViewControllerAnimated:YES];
}

......

- (void)dealloc {
    [closeButton release];
    [super dealloc];
}

참고: http://timneill.net/2010/11/modal-view-controller-example-part-2/

댓글