2013-07-13 3 views
-2

메서드가있는 viewController가 있습니다. doSomething :. 단추를 사용하여 선택기를 호출 할 수 있도록 "대상을 추가했습니다."단추가있는 메뉴를 설정하는 클래스 메뉴가 있습니다. 이 서브 클래스는 viewController로부터 인스턴스화됩니다.클래스간에 @selector를 전달하여 인스턴스화 된 객체에서 메서드를 호출합니다.

인스턴스화 된 메뉴의 버튼을 탭하면 viewController에서 메소드를 호출하고 싶습니다. 이것을 설정하는 명백한 방법은 NSNotifications에 옵저버를 추가하는 것이지만, 일종의 klunky처럼 보인다. 어떻게 든과 같이 인스턴스에 뷰 컨트롤러에서 선택기를 전달할 수 있습니다

의 ViewController에서 호출

-(void)setupMenuWithAction:(SEL)action { 

Menu.h

에 :

[menu setupMenuWithAction:@selector(doSomething:)]; 

그것을 시도하고 작동하지 않습니다 , 버튼을 도청 때 인식 할 수없는 선택기 오류를 제공하지만, 그것이 유효한 개념인지 궁금하네요, 만약 그렇다면 어떻게 고칠 수 있습니다.

답변

3

Menu.h의 메소드를 대상을 포함하도록 변경하십시오. - -(void)setupMenuWithAction:(SEL)action andTarget:(id)target으로 지정하십시오. 그 방법 내에서의 ViewController에서, 그리고 [target performSelector:action];

와 선택기를 호출 실제 선택을 가진 클래스의 함수에 대한 [menu setupMenuWithAction:@selector(doSomething:) andTarget:self];

+0

매우 재미 있지만, 비트 추가 방법은 확실하지 않습니다 : [object performSelector : action]; ... 메서드 setupMenuWithAction : 버튼을 만들고 선택기와 함께 대상을 추가합니다. performSelector :를 호출하는 또 다른 메소드를 작성합니까? 죄송합니다. 밀도가 있습니다. – Mrwolfy

+1

@Mrwolfy 문제 없습니다. 버튼에 대한 액션으로 직접 추가하고 싶다는 것을 깨닫지 못했습니다. 이것을 사용하십시오 - [''[myButton addTarget : target action : Action forControlEvents : UIControlEventTouchUpInside];''' – gtmtg

+0

그래, 총 감각을 만드는 네, 그리고 그랬어. 그래도 알 수없는 선택기 오류를 제공합니다. – Mrwolfy

0

전화, '+'대신 사용할 '-'. 즉, 인스턴스 메서드 대신 클래스 메서드를 사용하십시오

관련 문제