web-dev-qa-db-ja.com

Swift alert(UIAlertController)についての明確な説明はどこにありますか?

これに関する明確で有益な説明が見つかりませんでした。

21
Nikita Kurtin

件名でしばらく検索した後、クラス参照であっても明確な説明が見つかりませんでした IAlertController Reference

大丈夫ですが、私には十分ではありません。

だからいくつかの平和を集めた後、私は自分自身の説明をすることにしました(それが役立つことを願っています)

だからここに行く:

  1. UIAlertViewは指摘されているとおり非推奨です: SwiftのUIAlertView
  2. UIAlertControllerはiOS8 +で使用する必要があるため、最初に作成するにはインスタンス化する必要があり、Constructor(init)は3つのパラメーターを取得します。

2.1 title:String->アラートのダイアログボックスの上部に表示する太字のテキスト

2.2メッセージ:文字列->小さいテキスト(ほとんどの場合、自己を説明します)

2.3 prefferedStyle:UIAlertControllerStyle->ダイアログボックスのスタイルを定義します。ほとんどの場合、UIAlertControllerStyle.Alert

  1. 実際にユーザーに表示するには、 showViewController または presentViewController を使用して、アラートをパラメーターとして渡すことができます。

  2. ユーザーとの対話を追加するには、次を使用できます。

4.1 UIAlertController.addActionボタンを作成する

4.2 UIAlertController.addTextFieldテキストフィールドを作成するには

注の編集:以下のコード例、Swift 3構文用に更新)

例1:シンプルなダイアログ

@IBAction func alert1(sender: UIButton) {
     //simple alert dialog
    let alert=UIAlertController(title: "Alert 1", message: "One has won", preferredStyle: UIAlertControllerStyle.alert);
    //show it
    show(alert, sender: self);
}

例2:1つの入力textFieldと2つのボタンを持つダイアログ

@IBAction func alert2(sender: UIButton) {
    //Dialog with one input textField & two buttons
    let alert=UIAlertController(title: "Alert 2", message: "Two will win too", preferredStyle: UIAlertControllerStyle.alert);
    //default input textField (no configuration...)
    alert.addTextField(configurationHandler: nil);
    //no event handler (just close dialog box)
    alert.addAction(UIAlertAction(title: "No", style: UIAlertActionStyle.cancel, handler: nil));
    //event handler with closure
    alert.addAction(UIAlertAction(title: "Yes", style: UIAlertActionStyle.default, handler: {(action:UIAlertAction) in
        let fields = alert.textFields!;
        print("Yes we can: "+fields[0].text!);
    }));
    present(alert, animated: true, completion: nil);
}

例3:1つのカスタマイズされた入力textFieldと1つのボタン

@IBAction func alert3(sender: UIButton) {
   // one input & one button
   let alert=UIAlertController(title: "Alert 3", message: "Three will set me free", preferredStyle: UIAlertControllerStyle.alert);

    //configured input textField
    var field:UITextField?;// operator ? because it's been initialized later
    alert.addTextField(configurationHandler:{(input:UITextField)in
        input.placeholder="I am displayed, when there is no value ;-)";
        input.clearButtonMode=UITextFieldViewMode.whileEditing;
        field=input;//assign to outside variable(for later reference)
    });
    //alert3 yesHandler -> defined in the same scope with alert, and passed as event handler later
    func yesHandler(actionTarget: UIAlertAction){
        print("YES -> !!");
        //print text from 'field' which refer to relevant input now
        print(field!.text!);//operator ! because it's Optional here
    }
    //event handler with predefined function
    alert.addAction(UIAlertAction(title: "Yes", style: UIAlertActionStyle.default, handler: yesHandler));

    present(alert, animated: true, completion: nil);
 }

希望、幸運;-)

63
Nikita Kurtin

PresentViewController:animated:completion:メソッドを使用して、他のUIViewControllerと同様に、UIAlertControllerのインスタンスを画面にモーダルで表示できます。 UIAlertControllerインスタンスがActionSheetとして動作するかAlertViewとして動作するかを区別するのは、作成時に渡すスタイルパラメータです。

これ以上の委任はありません

UIActionSheetまたはUIAlertViewを使用したことがある場合、そこからコールバックを取得する方法は、クラス(ほとんどの場合ViewController)がUIActionSheetDelegateまたはUIAlertViewDelegateプロトコルを実装することであることを知っています。この委任パターンをブロックベースのコールバックに置き換えたオープンソースプロジェクトがいくつかありますが、公式のAPIは決して更新されませんでした。 UIAlertControllerは委任を使用しません。代わりに、UIAlertActionアイテムのコレクションがあり、クロージャー(Objective-Cを使用している場合はブロック)を使用してユーザー入力を処理します。

アクションシート用

@IBAction func showActionSheet(sender: AnyObject) {
  //Create the AlertController
  let actionSheetController: UIAlertController = UIAlertController(title: "Action Sheet", message: "Swiftly Now! Choose an option!", preferredStyle: .ActionSheet)

  //Create and add the Cancel action
  let cancelAction: UIAlertAction = UIAlertAction(title: "Cancel", style: .Cancel) { action -> Void in
    //Just dismiss the action sheet
  }
  actionSheetController.addAction(cancelAction)
    //Create and add first option action
  let takePictureAction: UIAlertAction = UIAlertAction(title: "Take Picture", style: .Default) { action -> Void in
    //Code for launching the camera goes here
    }
  actionSheetController.addAction(takePictureAction)
  //Create and add a second option action
  let choosePictureAction: UIAlertAction = UIAlertAction(title: "Choose From Camera Roll", style: .Default) { action -> Void in
    //Code for picking from camera roll goes here
    }
  actionSheetController.addAction(choosePictureAction)

  //Present the AlertController
  self.presentViewController(actionSheetController, animated: true, completion: nil)
}

テキストフィールドのあるAlertViewの場合

@IBAction func showAlert(sender: AnyObject) {
  //Create the AlertController
  let actionSheetController: UIAlertController = UIAlertController(title: "Alert", message: "Swiftly Now! Choose an option!", preferredStyle: .Alert)

  //Create and add the Cancel action
  let cancelAction: UIAlertAction = UIAlertAction(title: "Cancel", style: .Cancel) { action -> Void in
    //Do some stuff
    }
  actionSheetController.addAction(cancelAction)
    //Create and an option action
  let nextAction: UIAlertAction = UIAlertAction(title: "Next", style: .Default) { action -> Void in
    //Do some other stuff
    }
  actionSheetController.addAction(nextAction)
  //Add a text field
  actionSheetController.addTextFieldWithConfigurationHandler { textField -> Void in
       //TextField configuration
     textField.textColor = UIColor.blueColor()
   }

   //Present the AlertController
   self.presentViewController(actionSheetController, animated: true, completion: nil)
}
11
Omer Waqas Khan

元の応答以降、構文の一部が変更されています。ユーザーがiCloudにサインインしていない場合にユーザーに警告するサンプルコードを次に示します。

CKContainer.default().accountStatus { (accountStatus, error) in
        switch accountStatus {
        case .available:
            print("iCloud Available")
        case .noAccount:
            print("No iCloud account")
            //simple alert dialog
            let alert=UIAlertController(title: "Sign in to iCloud", message: "This application requires iClound. Sign in to your iCloud account to write records. On the Home screen, launch Settings, tap iCloud, and enter your Apple ID. Turn iCloud Drive on. If you don't have an iCloud account, tap Create a new Apple ID", preferredStyle: UIAlertControllerStyle.alert);
            //no event handler (just close dialog box)
            alert.addAction(UIAlertAction(title: "Cancel", style: UIAlertActionStyle.cancel, handler: nil));
            //show it
            self.present(alert, animated: true, completion: nil)
        case .restricted:
            print("iCloud restricted")
        case .couldNotDetermine:
            print("Unable to determine iCloud status")
        }
    }
1
CliffAnd