1

タイトルとコンテンツの 2 つのパラメーターを受け入れるユーティリティとして、この UIAlertController があります。「確認」ボタンを変更したい。このユーティリティを複製して、特定の機能を実行する別のパラメーターを追加したいと考えています。

-(UIAlertController *) modalWithTitle : (NSString *) title andContent: (NSString *) content{

    UIAlertController *alert = [UIAlertController alertControllerWithTitle: title message:content preferredStyle:UIAlertControllerStyleAlert];

    UIAlertAction *defaultAction = [UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault handler:^(UIAlertAction * action){}];

    [alert addAction:defaultAction];
    return alert;
}

コード例:

UIAlertController *alert =[[ModalController alloc] modalWithTitle:@"Error" andContent:@"Network unavailable."
        andAction:<ENTER FUNCTION TO EXECUTE HERE>];
        [self presentViewController:alert animated:YES completion:nil];
4

1 に答える 1

4

次のように記述できます。

+ (UIAlertController *)modalWithTitle:(NSString *)title andContent:(NSString *)content andHandler:(void (^)(UIAlertAction *))handler {
    UIAlertController *alert = [UIAlertController alertControllerWithTitle: title message:content preferredStyle:UIAlertControllerStyleAlert];
    UIAlertAction *defaultAction = [UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault handler:handler];
    [alert addAction:defaultAction];
    return alert;
}

使用法:

void (^handler)(UIAlertAction *) = ^(UIAlertAction *action) {
    // code to execute
};
[[ModalController alloc] modalWithTitle:@"title" andContent:@"content" andHandler:handler];

別のアプローチ:

+ (UIAlertController *)modalWithTitle:(NSString *)title andContent:(NSString *)content andHandler:(void (^)(void))handler {
    UIAlertController *alert = [UIAlertController alertControllerWithTitle:title message:content preferredStyle:UIAlertControllerStyleAlert];
    UIAlertAction *defaultAction = [UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault handler:^(UIAlertAction *action) {
        handler();
    }];
    [alert addAction:defaultAction];
    return alert;
}

使用法:

void (^block)(void) = ^{
    // code to execute
};
[[ModalController alloc] modalWithTitle:@"title" andContent:@"content" andHandler:block];
于 2016-06-27T06:52:16.453 に答える