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;
}

次に、class-dumpを介して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