@niwakk7 Web開発メモ

元々iPhoneアプリ開発のブログだったのですが、開発を休止しているためWeb関連の技術メモを残していきます。

UIAlertControllerでアラートやテキスト入力モーダル画面を出す。

iOS8からUIAlertViewが非推奨になり、UIAlertControllerという新しいクラスを使う必要が出た。簡単に使い方をまとめた。

ボタン二つの通常のAlertView


f:id:niwakk7:20141002183359p:plain:w200

    UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"Title" message:@"message" preferredStyle:UIAlertControllerStyleAlert];
    
    //addActionでボタンと、押されたときのハンドラを登録。    
 [alert addAction:[UIAlertAction actionWithTitle:@"OK"
                                              style:UIAlertActionStyleDefault
                                            handler:^(UIAlertAction *action) {
                                                NSLog(@"OK pushed");
                                                
                                            }]];

    [alert addAction:[UIAlertAction actionWithTitle:@"Cancel"
                                              style:UIAlertActionStyleDestructive
                                            handler:^(UIAlertAction *action) {
                                                NSLog(@"Cancel pushed");
                                            }]];

    //出力
    [self presentViewController:alert animated:YES completion:nil];

delegateメソッドを登録する必要がなくなったのですっきりした。あと、BlocksKitも使う必要がなくなった。

テキスト入力するためのAlertView


f:id:niwakk7:20141002183524p:plain:w200

    UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"Title" message:@"message" preferredStyle:UIAlertControllerStyleAlert];
    
    [alert addAction:[UIAlertAction actionWithTitle:@"OK"
                                              style:UIAlertActionStyleDefault
                                            handler:^(UIAlertAction *action) {
                                                NSLog(@"OK pushed");
                                                
                                            }]];
    
    [alert addTextFieldWithConfigurationHandler:^(UITextField *textField) {
        textField.placeholder = @"text input";
        textField.delegate = self;
    }];
    
    [self presentViewController:alert animated:YES completion:nil];
- (void)textFieldDidEndEditing:(UITextField *)textField
{
    self.text = textField.text;
    
    NSLog(@"text editing finished");
}

ポイントは、addTextFieldWithConfigurationHandlerかも。ここでdelegateを設定しておいて、OKボタンが押されたら編集終了となり、textFieldDidEndEditingがよばれるという流れ。


AlertControllerSample/AlertControllerSample at master · niwakk7/AlertControllerSample · GitHub