基本上我想获得一个UIButton的动作目标列表。我经历了this,我的问题略有不同,因为我不知道目标是什么。我所拥有的只是一个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'
任何帮助表示感谢。
答案 0 :(得分:2)
根据the UIControl documentation,要发送以获取目标列表的消息是 allTargets ,而不是您建议的targetActions。解决方案的其余部分在How to get UIButton Target, Action and Control events?
的接受答案中当您不知道自己在做什么时可以使用的调试技术是使用respondsToSelector来检查您是否正在发送对象可以响应的消息: when to use respondsToSelector in objective-c