0

私はObjective-Cを使っていくつかのUIAlertControllerコードについて書いています。

もっとボタンがありますが、ボタンは異なる を表示UIAlertControllerし、異なるUIAlertActionhandler を処理します。

UIAlertControllerだから私は1つを作成したいと思いますUIAlertAction

以下のように:

-(void) initAlert{
    alertController = [UIAlertController alertControllerWithTitle:@"hint" message:@"count down alert" preferredStyle:UIAlertControllerStyleAlert];

    doneAction = [UIAlertAction actionWithTitle:@"okey" style:UIAlertActionStyleDefault handler:
              ^(UIAlertAction *action) {
    NSLog(@"show log");
    }];
    [alertController addAction:doneAction];
}

-(void) showAlert{
    [self presentViewController:alertController animated:YES completion:nil];
}

次に、別のボタンを使用してメソッドIBActionを呼び出し、別のタイトル、タイトル、および別のハンドラーを設定します。showAlertUIAlertControllerUIAlertActionalertAction

しかし、私はいくつかの問題に遭遇します。

以下のように、別のボタンでメソッドを呼び出します。

- (IBAction)btn1Action:(UIButton *)sender {

    alertController.title = @"controller 1";
    alertController.message = @"message1";

    [self showAlert];
}

- (IBAction)btn2Action:(UIButton *)sender {

    alertController.title = @"controller 2";
    alertController.message = @"message2";

    [self showAlert];
}

UIAlertAction同じ doneAction でタイトルを変更する方法がわかりませんUIAlertAction。 is readyonly プロパティを示すいくつかのデータを検索します。

UIAlertActionタイトルを変更する他の方法はありますか?または、メソッドを削除してUIAlertController addAction:その他を追加できUIAlertActionますか?

また、別のUIAlertActionハンドラーを AlertAction に渡して同じUIAlertControllerものを使用するにはどうすればよいですか?

どうもありがとうございました。

4

1 に答える 1

0

UIAlertController を複数回使用しないでください。アラートをポップアップ表示するたびに、新しい UIAlertController インスタンスを使用するだけです。

- (IBAction)btn1Action:(UIButton *)sender {

    [self showAlert:@"Controller 1" message:@"Message 1" handler:^(UIAlertAction *action) {
        NSLog(@"btn1Action");
    }];
}

- (IBAction)btn2Action:(UIButton *)sender {

    [self showAlert:@"Controller 2" message:@"Message 2" handler:^(UIAlertAction *action) {
        NSLog(@"btn2Action");
    }];
}

-(void)showAlert:(NSString*)alertTitle message:(NSString*)message handler:(void (^ __nullable)(UIAlertAction *action))handler {
    UIAlertController * alertController = [UIAlertController alertControllerWithTitle:alertTitle message:message preferredStyle:UIAlertControllerStyleAlert];

    UIAlertAction * doneAction = [UIAlertAction actionWithTitle:@"Ok" style:UIAlertActionStyleDefault handler:handler];
    [alertController addAction:doneAction];

    [self presentViewController:alertController animated:YES completion:nil];
}
于 2016-01-05T16:58:23.673 に答える