これに関する明確で有益な説明が見つかりませんでした。
件名でしばらく検索した後、クラス参照であっても明確な説明が見つかりませんでした IAlertController Reference
大丈夫ですが、私には十分ではありません。
だからいくつかの平和を集めた後、私は自分自身の説明をすることにしました(それが役立つことを願っています)
だからここに行く:
UIAlertView
は指摘されているとおり非推奨です: SwiftのUIAlertViewUIAlertController
はiOS8 +で使用する必要があるため、最初に作成するにはインスタンス化する必要があり、Constructor(init)は3つのパラメーターを取得します。2.1 title:String->アラートのダイアログボックスの上部に表示する太字のテキスト
2.2メッセージ:文字列->小さいテキスト(ほとんどの場合、自己を説明します)
2.3 prefferedStyle:UIAlertControllerStyle
->ダイアログボックスのスタイルを定義します。ほとんどの場合、UIAlertControllerStyle.Alert
実際にユーザーに表示するには、 showViewController
または presentViewController
を使用して、アラートをパラメーターとして渡すことができます。
ユーザーとの対話を追加するには、次を使用できます。
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);
}
希望、幸運;-)
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)
}
元の応答以降、構文の一部が変更されています。ユーザーが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")
}
}