2017-09-24 2 views
0

나는 selector as parameter in IOS 게시물을 읽었습니다. 그러나 나는 그 질문을 연장하고자한다. 내 경우 IOS의 선택기로서 다른 객체의 기능을 어떻게 pas 할 수 있습니까?

, 내가 목표 -C (스위프트되지 않음) 마스터/상세 애플리케이션을 작성하고 다음 init 함수

DetailViewController.h에서

와 형의 UIViewController의 DetailController 객체를 생성 할거야

- (id)initWithNibName:(NSString *)nibName withSaveSelector:(SEL)saveSelector 
{ 
    self = [super initWithNibName:nibName bundle:nil]; 
    if (self) { 
     UIBarButtonItem *done = [[UIBarButtonItem alloc] 
           initWithBarButtonSystemItem:UIBarButtonSystemItemDone 
           target:self 
           action:saveSelector]; 
     [[self navigationItem] setRightBarButtonItem:done animated:YES]; 
    } 
    return self; 
} 

지금, 난 그냥 다른 DetailViewController를 만드는 코드 위에 다시 계속 사용하려면 ... 그리고 DetailViewController.m에

@interfact DetailViewController : UIViewController 
- (id)initWithNibName:(NSString *)nibName withSaveSelector:(SEL)saveSelector 
@end 

사용자가 "완료"버튼을 누를 때 호출 될 saveSelector 함수를 전달하려고합니다.

는 지금은 다른 뷰 컨트롤러

@interface AnotherViewController : UIViewController 
- (void)saveSelector:(id)sender; 
@end 

을 가지고 ... 그리고 또 다른 목적 (즉, 은하지 AnotherViewController.m 코드에서) 내가 지금처럼, 위의 뷰 컨트롤러를 사용에 .. .

AnotherViewController *avc = [[AnotherViewController alloc] init]; 
DetailViewController *dvc = [[DetailViewController alloc] initWithNibName:@"AnotherViewController" withSaveSelector:@selector(???)]; 

무엇을 넣어야합니까? 그래서 AnotherViewController :: saveSelector() 함수를 DetailViewController에 전달할 수 있습니까?

나는 그것이 의미가 있기를 바랍니다.

답변

1
는 귀하의 방법을 변경

:

- (id)initWithNibName:(NSString *)nibName withSaveSelector:(SEL)saveSelector forTarget:(id)target 

그리고 다음과 같이 호출 :

DetailViewController *dvc = [[DetailViewController alloc] initWithNibName:@"AnotherViewController" withSaveSelector:@selector(saveSelector:) forTarget:avc]; 

- (id)initWithNibName:(NSString *)nibName withSaveSelector:(SEL)saveSelector forTarget:(id)target 
{ 
    self = [super initWithNibName:nibName bundle:nil]; 
    if (self) { 
     UIBarButtonItem *done = [[UIBarButtonItem alloc] 
           initWithBarButtonSystemItem:UIBarButtonSystemItemDone 
           target:target 
           action:saveSelector]; 
     [[self navigationItem] setRightBarButtonItem:done animated:YES]; 
    } 
    return self; 
} 
DetailViewController.m에서