1

基本上我想获得一个 UIButton 的动作目标列表。我已经经历了这个,我的问题略有不同,因为我不知道目标是什么。我只有一个 UIButton 对象。所以这就是我为捕获所有行动目标所做的事情。

受以下方法的启发,该方法在我将 firstResponder 对象作为有效指针的情况下工作。

UIWindow *keyWindow = [[UIApplication sharedApplication] keyWindow];
UIView   *firstResponder = [keyWindow performSelector:@selector(firstResponder)];

我在 UIKit 上使用了 class-dump 来查看 UIWindow 类,我发现 firstResponder 如下。

 NS_CLASS_AVAILABLE_IOS(2_0) @interface UIWindow : UIView {
  @package
    UIResponder             *_firstResponder;
}

然后我通过类转储检查了 UIControl

NS_CLASS_AVAILABLE_IOS(2_0) @interface UIControl : UIView {
  @package
     NSMutableArray* _targetActions;
 }

所以这就是我尝试做的事情并且它崩溃了。

    NSMutableArray *arr = (NSMutableArray*)[((UIControl*)btn) performSelector:@selector(targetActions)];
    NSLog(@"%@",arr);

听起来像是对我的阴谋。但更有可能是我在搞砸一些事情。有谁知道如何访问 UIControl 的 targetActions 数组?

编辑:这是错误消息 -

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-    [UIRoundedRectButton targetActions]: unrecognized selector sent to instance 0x1c0ab0'

任何帮助表示赞赏。

4

1 回答 1

2

根据UIControl 文档,要发送以获取目标列表的消息是allTargets而不是您建议的 targetActions。解决方案的其余部分在How to get UIButton Target, Action and Control events 的公认答案中?

当您不知道自己在做什么时可以使用的一种调试技术是使用 respondsToSelector 来检查您是否正在发送对象可以响应的消息: when to use respondsToSelector in objective-c

于 2013-08-17T05:28:24.097 回答