繁体   English   中英

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

[英]Determine if responder chain will handle an action

响应者链很酷

特别是,能够向第一响应者发送自定义操作,这些操作将冒泡到可能感兴趣的任何其他人: [[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:…等效的方法sendAction:…它将自动从第一个响应者开始并进行操作。

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

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

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

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

[aResponder respondsToSelector:@selector(methodToSend)];

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM