确定响应者链是否会处理一个行动
响应者链很酷 。
尤其是,能够将自定义操作发送给第一个响应者,这个操作会冒泡给任何可能感兴趣的人: [[UIApplication sharedApplication] sendAction: @selector(commandToSend) to: nil from: self forEvent: nil]
。
或者更less的自定义操作:
[[UIApplication sharedApplication] sendAction: @selector(resignFirstResponder) to: nil from: self forEvent: nil]
我想知道 – 如果现在发送某个特定发件人的特定操作,是否有办法进行testing? 一个明显的用法是启用和禁用发送操作的button,取决于当前是否要处理该操作。
如果你碰巧知道第一个响应者,我想你可以[aResponder targetForAction: @selector(methodYouWantToSend) withSender: selfOrSomethingElse]
,并检查答案是否为零。 但是似乎并没有一个和UIApplication
的sendAction:…
类似的方法sendAction:…
它将自动从第一个响应者开始,并进行处理。
这里有一个愉快的解决scheme ,通过利用响应者链来find第一响应者。
一旦你知道了第一个响应者,很容易问当前的响应者链是否处理了一个特定的动作。 如果你愿意,你甚至可以找出谁来处理它。
const SEL action = @selector(theActionYouWantToSend); UIResponder *const currentTarget = [[UIResponder firstResponder] targetForAction: action withSender: self]; const bool actionIsHandled = currentTarget != nil;
你可以检查响应者是否可以响应这样的动作:
[aResponder respondsToSelector:@selector(methodToSend)];
如果可以响应,则返回YES
。 那么你知道调用这个方法是安全的