UIAlertActionのハンドラーを実行するにはどうすればよいですか?

ベン・レギエロ

私は、我々のアプリは、両方をサポートできるようにするためのヘルパークラスを作成しようとしているUIAlertActionUIAlertViewただし、のalertView:clickedButtonAtIndex:メソッドを記述しているときに、UIAlertViewDelegateこの問題に遭遇しましUIAlertAction。のハンドラブロックでコードを実行する方法がわかりません

UIAlertAction呼ばれるプロパティsの配列を保持することでこれを実行しようとしていますhandlers

@property (nonatomic, strong) NSArray *handlers;

次に、次のようなデリゲートを実装します。

- (void) alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{
    UIAlertAction *action = self.handlers[buttonIndex];
    if (action.enabled)
        action.handler(action);
}

ただし、ヘッダーには次のものがあるaction.handlerため、プロパティはなく、実際にそれをフェッチする方法はありませんUIAlertAction

NS_CLASS_AVAILABLE_IOS(8_0) @interface UIAlertAction : NSObject <NSCopying>

+ (instancetype)actionWithTitle:(NSString *)title style:(UIAlertActionStyle)style handler:(void (^)(UIAlertAction *action))handler;

@property (nonatomic, readonly) NSString *title;
@property (nonatomic, readonly) UIAlertActionStyle style;
@property (nonatomic, getter=isEnabled) BOOL enabled;

@end

handlerブロックでコードを実行する他の方法はありUIAlertActionますか?

ドリューH

いくつかの実験の後、私はこれを理解しました。ハンドラブロックを関数ポインタとしてキャストでき、関数ポインタを実行できることがわかりました。

そのようです

//Get the UIAlertAction
UIAlertAction *action = self.handlers[buttonIndex];

//Cast the handler block into a form that we can execute
void (^someBlock)(id obj) = [action valueForKey:@"handler"];

//Execute the block
someBlock(action);

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

Reactのイベントハンドラーの外でバインドされた関数を実行するにはどうすればよいですか?

分類Dev

ZAP のハンドラーを実装するにはどうすればよいですか?

分類Dev

このLinux割り込みハンドラーの実行にかかる時間を測定するにはどうすればよいですか?

分類Dev

Javascriptイベントハンドラーを最初に実行するようにするにはどうすればよいですか?

分類Dev

Rx.NetにexhaustMapハンドラーを実装するにはどうすればよいですか?

分類Dev

CardServiceでクリックハンドラーを実装するにはどうすればよいですか?

分類Dev

メソッドの例外ハンドラーでJUnitテストを実行するにはどうすればよいですか?また、関数が通常入力にファイルを使用する場合はどうすればよいですか?

分類Dev

Ctrl + Cを押すとすぐに実行されるSIGINTハンドラーを登録するにはどうすればよいですか?

分類Dev

実行時にトルネードハンドラーを置き換えるまたは変更するにはどうすればよいですか?

分類Dev

VertxイベントループスレッドでCompletableFutureハンドラーを実行するにはどうすればよいですか?

分類Dev

タスクの前に実行されるが、タスクを実行する必要がある場合にのみ実行されるAnsible「プリハンドラー」を作成するにはどうすればよいですか?

分類Dev

失敗時にタスクを実行できるansibleハンドラーを作成するにはどうすればよいですか?

分類Dev

Macのコマンドラインでdockerを実行するにはどうすればよいですか?

分類Dev

Cでシグナルハンドラー関数を実行した後にscanfを回避するにはどうすればよいですか?

分類Dev

tar圧縮のドライランを実行するにはどうすればよいですか?

分類Dev

after_requestハンドラーが実行される順序を制御するにはどうすればよいですか?

分類Dev

Katanaで複数の認証ハンドラーを作成するにはどうすればよいですか?

分類Dev

実際のhrefを持つすべてのリンクにハンドラーを設定するにはどうすればよいですか?

分類Dev

postgresでグローバル例外ハンドラーを実行するにはどうすればよいですか?

分類Dev

MACの外付けハードドライブでUbuntuとWindows10を実行するにはどうすればよいですか?

分類Dev

Edgeでハードリフレッシュを実行するにはどうすればよいですか?

分類Dev

XサーバーをWindowsのバックグラウンドで実行するように設定するにはどうすればよいですか?

分類Dev

httpハンドラーの購読を解除するにはどうすればよいですか?

分類Dev

Firebaseデータの完了ハンドラを作成するにはどうすればよいですか?

分類Dev

react内のAPIエラーハンドルを表示するにはどうすればよいですか?

分類Dev

nil互換の完了ハンドラーを作成するにはどうすればよいですか?

分類Dev

AWS Lambdaハンドラー内で実行可能ファイルを使用するにはどうすればよいですか?

分類Dev

以下に示すコードのように、c ++でランダムな結果を実行するにはどうすればよいですか?

分類Dev

アプリで特定のSpringBootCommandLineRunnerランナーを実行するにはどうすればよいですか?

Related 関連記事

  1. 1

    Reactのイベントハンドラーの外でバインドされた関数を実行するにはどうすればよいですか?

  2. 2

    ZAP のハンドラーを実装するにはどうすればよいですか?

  3. 3

    このLinux割り込みハンドラーの実行にかかる時間を測定するにはどうすればよいですか?

  4. 4

    Javascriptイベントハンドラーを最初に実行するようにするにはどうすればよいですか?

  5. 5

    Rx.NetにexhaustMapハンドラーを実装するにはどうすればよいですか?

  6. 6

    CardServiceでクリックハンドラーを実装するにはどうすればよいですか?

  7. 7

    メソッドの例外ハンドラーでJUnitテストを実行するにはどうすればよいですか?また、関数が通常入力にファイルを使用する場合はどうすればよいですか?

  8. 8

    Ctrl + Cを押すとすぐに実行されるSIGINTハンドラーを登録するにはどうすればよいですか?

  9. 9

    実行時にトルネードハンドラーを置き換えるまたは変更するにはどうすればよいですか?

  10. 10

    VertxイベントループスレッドでCompletableFutureハンドラーを実行するにはどうすればよいですか?

  11. 11

    タスクの前に実行されるが、タスクを実行する必要がある場合にのみ実行されるAnsible「プリハンドラー」を作成するにはどうすればよいですか?

  12. 12

    失敗時にタスクを実行できるansibleハンドラーを作成するにはどうすればよいですか?

  13. 13

    Macのコマンドラインでdockerを実行するにはどうすればよいですか?

  14. 14

    Cでシグナルハンドラー関数を実行した後にscanfを回避するにはどうすればよいですか?

  15. 15

    tar圧縮のドライランを実行するにはどうすればよいですか?

  16. 16

    after_requestハンドラーが実行される順序を制御するにはどうすればよいですか?

  17. 17

    Katanaで複数の認証ハンドラーを作成するにはどうすればよいですか?

  18. 18

    実際のhrefを持つすべてのリンクにハンドラーを設定するにはどうすればよいですか?

  19. 19

    postgresでグローバル例外ハンドラーを実行するにはどうすればよいですか?

  20. 20

    MACの外付けハードドライブでUbuntuとWindows10を実行するにはどうすればよいですか?

  21. 21

    Edgeでハードリフレッシュを実行するにはどうすればよいですか?

  22. 22

    XサーバーをWindowsのバックグラウンドで実行するように設定するにはどうすればよいですか?

  23. 23

    httpハンドラーの購読を解除するにはどうすればよいですか?

  24. 24

    Firebaseデータの完了ハンドラを作成するにはどうすればよいですか?

  25. 25

    react内のAPIエラーハンドルを表示するにはどうすればよいですか?

  26. 26

    nil互換の完了ハンドラーを作成するにはどうすればよいですか?

  27. 27

    AWS Lambdaハンドラー内で実行可能ファイルを使用するにはどうすればよいですか?

  28. 28

    以下に示すコードのように、c ++でランダムな結果を実行するにはどうすればよいですか?

  29. 29

    アプリで特定のSpringBootCommandLineRunnerランナーを実行するにはどうすればよいですか?

ホットタグ

アーカイブ