2015-01-09 5 views
3

The responder chain is cool.응답 체인이 작업을 처리 할 것인지 결정

특히 관심이있을 수있는 다른 사람에게 거품을 일으킬 사용자 지정 작업을 첫 번째 응답자에게 보낼 수 있습니다 : [[UIApplication sharedApplication] sendAction: @selector(commandToSend) to: nil from: self forEvent: nil]. 와

또는 덜 사용자 정의 행동 :

[[UIApplication sharedApplication] sendAction: @selector(resignFirstResponder) to: nil from: self forEvent: nil] 

내가 알고 싶습니다 -이 전송 된 경우 특정 보낸 사람의 특정 작업이 을 처리 할 경우 손 전에 을 테스트하는 방법이 지금? 분명한 것은이 동작을 현재 처리 할 것인지 여부에 따라 동작을 보내는 단추를 사용하거나 사용하지 않도록 설정하는 것입니다.

첫 번째 응답자를 알고있는 경우 [aResponder targetForAction: @selector(methodYouWantToSend) withSender: selfOrSomethingElse]을 수행하고 대답이 0이 아닌지 확인하십시오. 그러나 UIApplicationsendAction:…에 해당하는 메소드가 자동으로 첫 번째 응답자에서 시작되어 작동하는 것처럼 보이지 않습니다. 이 응답 할 수 있다면, 그것은 YES를 돌아갑니다

[aResponder respondsToSelector:@selector(methodToSend)]; 

: 응답자가이 같은 조치에 응답 할 수있는 경우

답변

1

응답자 체인을 활용하여 첫 번째 응답자를 찾는 데는 delightful solution here이 있습니다.

첫 번째 응답자를 알게되면 현재 응답자 체인에서 특정 작업을 처리하는지 쉽게 물어볼 수 있습니다. 당신은 누가 그것을 처리 할 것인지를 알 수 있습니다.

const SEL action = @selector(theActionYouWantToSend); 
UIResponder *const currentTarget = [[UIResponder firstResponder] targetForAction: action withSender: self]; 
const bool actionIsHandled = currentTarget != nil; 
0

당신은 확인할 수 있습니다. 그 방법을 호출하는 것이 안전하다는 것을 알고 있습니다.

+0

응답 체인에 대해서는 작동하지 않습니다. _it_가 메서드를 처리 할 수 ​​있는지 여부를 묻는 것만으로 'aResponder'를 요청합니다. 메소드를 처리 할 수 ​​있다면 응답 체인 **을 묻지 않습니다. – Benjohn

+0

나는 당신이 그 때에 연결된 기사를 읽음으로써 새로운 것을 배우려고하고있는 것처럼 들린다. :) – Chris

+0

너는 완전히있다, 친구. 그것은 굉장. 그것은 또한 널리 알려지지는 않았지만 매우 강력하고 우아합니다. 예를 들어, unwind segues를 구현하려는 경우 필요한 많은 것을 제공합니다. – Benjohn