2016-11-17 5 views
1

UIAlertActionを生成してハンドラで返すことのできる関数を作成することは可能ですか?UIAlertViewController用のUIAlertActionを作成する共通の関数をアプリケーション全体で使用するにはどうすればいいですか?

私はUIAlertActionのコードを複数回書く必要はなく、必要なシナリオごとにUIAlertActionを作成できる単一の関数を作成しようとしています。 ここに私のコードです。

UIAlertAction *actionPast = [self createActionButton:@"Past"]; 
    UIAlertAction *actionFuture = [self createActionButton:@"Future"]; 

    -(UIAlertAction *)createActionButton : (NSString *)title{ 
     UIAlertAction *action = [UIAlertAction actionWithTitle:title style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {}]; 
     return action; 
    } 

したがって、任意のUIAlertActionをクリックすると、ハンドラを元に戻して任意のタスクを実行する可能性があります。

+0

質問が不明です。なぜあなたはこれをやろうとしていますか? –

+0

私はUIAlertActionコードをすべてのコントローラに何度も書きたくないだけです。 –

+0

私はシングルトン関数がアプリケーション全体のためにUIAlertActionを作成したいと思っています –

答えて

1

はい、これを行うことができます。あなたはタイトルのAlertActionを作成したい場合には、例えば

+(UIAlertAction *) createAlertActionWithSelector:(SEL) selector andTitle:(NSString *) title andAlertActionStyle:(UIAlertActionStyle) style andCallBackTarget:(id) target{ 
    UIAlertAction *action; 

    action = [UIAlertAction actionWithTitle:title style:style handler:^(UIAlertAction * action) { 
     [target performSelector:selector]; 

    }]; 
    return action; 
} 

:(あなたはそれがクラスメソッドかに依存するインスタンスメソッドになりたいかどうか)あなたのユーティリティクラス/共有クラスに次のメソッドを作成します。 「OK」、方法「okButtonTapped」とUIAlertActionStyleDefaultに埋め込まれたコードは、あなたがこのようにそれを呼びたい:

ここ
UIAlertAction * okAction = [UtilityClass createAlertActionWithSelector:@selector(okButtonTapped) 
                    andTitle:@"OK" 
                  andAlertActionStyle:UIAlertActionStyleDefault 
                 andCallBackTarget:self]; 

CallbackTargetあなたは私たちがここにselfを渡しているから、共有メソッドを呼び出しているものは何でもクラスです。 ハンドラで実行するメソッドは、callBackTargetClass内に存在する必要があります。ちょうどあなたがハンドラブロックで実行し、alertActionクリエータ方法にセレクタとして、そのメソッドを渡したいコードのためのメソッドを作成することを確認してください

[alertController addAction:okAction]; 

今のようなあなたのUIAlertControllerに追加します。それでおしまい。

免責事項:それは動作しますが、それは現在のセレクタは、セレクタを実行する上で不明であるとしてセレクタが漏れを起こす可能性があるという警告を示しています。この警告についてはanswerを参照してください。

+0

答えがありがたいですが、問題は解決していますが、コードを減らしたいのですが、このアプローチではステートメントの数は同じです。 –

+0

UIAlertActionを作成するための行数のコードが減少しないので、このシングルトンアプローチに従うように私に提案することができます。 –

+0

@SumitDhariwal何を待つ?これをユーティリティ/シングルトンクラスに入れ、シナリオに合わせてこのメソッドを呼び出す必要があります。 – NSNoob

関連する問題