确定响应者链是否将处理操作

时间:2015-01-09 15:31:11

标签: ios first-responder uiresponder responder-chain

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],并检查答案是否为零。但似乎并不是UIApplication sendAction:…的等效方法,它会自动从第一个响应者开始并开始工作。

2 个答案:

答案 0 :(得分:1)

通过利用响应者链找到第一个响应者有delightful solution here

一旦您知道了第一个响应者,就很容易询问当前的响应者链是否处理了特定的操作。如果愿意,你甚至可以找出谁将会处理它。

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

答案 1 :(得分:0)

您可以检查响应者是否可以响应此操作:

[aResponder respondsToSelector:@selector(methodToSend)];

如果可以回复,则会返回YES。然后你知道称这种方法是安全的