1. 선언
@class ViewController; //뷰 컨트럴러 선언 전에 선언하는 경우가 많아 클래스 명만 미리 쳐둠
@protocol ViewControllerDelegate <NSObject>
@optional
- (void) function : (ViewController*)viewController ;
@end
함수 작성시에는 현재 뷰컨트럴러를 넘겨준다.
이 이유는 델리게이트를 쓰는 함수가 해당 뷰컨트롤러의 동작 시점은 알 수 있지만, 해당 뷰컨트럴러를 조작할 수 없기 때문에 넣는것이 관례이다.
TableView나 SearchBar의 delegate함수들을 보면
- (NSInteger)tableView:(UITableView *)table numberOfRowsInSection:(NSInteger)section
위와 같이 tableView에 접근할 수 있는 인자를 가지고 있다.
원하는 인자를 추가하기 위해서는 :을 통해 추가해주면 된다.
만약 위 함수에서 int값을 하나 넘겨주고 싶다면
-(void) function : (ViewController*) viewContrl withInt : (int) num;
위와 같이 선언하면 된다.
2. 뷰컨트롤러 안에 변수 추가
@interface ViewController : UIViewController
@property (nonatomic, assign) id <ViewControllerDelegate> delegate;
@end
3. 원하는 시점에 delegate 함수 만들어주기
if (_delegate && [_delegate respondsToSelector:@selector(function:)]) //delegate와 function이란 delegate함수가 존재한다면
{
[_delegate function:self]; //delegate함수 호출
}
else
{
NSLog(@"delegate나 function: 함수가 구현되지 않았습니다.");
}
4. 뷰 컨트롤러를 띄우는 이전 뷰컨트럴러 에서 Delegate 선언
@interface나 @impelement 클래스명 오른쪽에 <ViewControllerDelegate> 추가
ex) @interface MainViewController : UIViewController <ViewControllerDelegate>
5. 뷰컨트럴러 선언시 delegate설정
ViewController* viewContrl = [[ViewController alloc] init];
viewContl.delegate = self; //이부분, 4번을 하지 않으면 해도 소용없음
6. delegate함수 구현
- (void) function : (ViewController*) viewContrl;
{
//원하는 작업을 넣는다.
}
위의 작업을 모두 해야하지만 숫자로만 적으면 헷갈리니 설명을 보충
MainViewController.m에서 ViewController.m을 띄운다고 가정하면
1,2번은 ViewController.h에서 해야 할 내용이고
3번은 ViewController.m에서 해야 할 내용이다.
4번은 MainViewController.h에서 해야 할 내용이고
5,6번은 MainViewController.m에서 해야 할 내용이다.
'프로그래밍 > iOS' 카테고리의 다른 글
[ios] 네이버 맵 테스트 주소->위,경도/ 위경도->주소 (0) | 2015.04.09 |
---|---|
[ios] 구글맵 주소->위도,경도 / 위도경도->주소 (0) | 2015.04.09 |
[ios] 기기의 가로, 세로 사이즈 가져오기(ios8 수정) (0) | 2015.04.08 |
[ios] UIImage를 jpg파일이나 raw파일로 저장하는 법 (0) | 2015.04.08 |
[ios] non-arc환경으로 작성된 코드 적용하기, 반대의 경우도 (0) | 2015.04.08 |