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



响应器链很酷。

特别是,能够向第一响应者发送自定义操作,这些操作将冒泡给可能感兴趣的任何其他人:[[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],并检查答案是否为零。但是似乎没有一种等效的方法可以与UIApplicationsendAction:…自动从第一响应者开始并工作。

这里有一个令人愉快的解决方案,通过利用响应者链来找到第一个响应者。

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

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

您可以检查响应程序是否可以像这样响应操作:

[aResponder respondsToSelector:@selector(methodToSend)];

如果它可以响应,它将返回YES 。然后你知道调用该方法是安全的

最新更新