【Swift】アラート内にtextFieldを設置する

完成図

 

 

f:id:nekokichi_yos2:20181109135343p:plain

f:id:nekokichi_yos2:20181109135347p:plain

f:id:nekokichi_yos2:20181109135350p:plain

 

解説

 

・アラート内のtextFieldは複数設置可能

・各textFieldを識別するために、それぞれにtagを設定

・一旦、アラートのtextFieldを全て格納した配列を取得し、for文で1つずつ取り出していく

 

ソースコード

 

 

import UIKit

class ViewController: UIViewController {
    
    @IBOutlet weak var label: UILabel!
    @IBOutlet weak var label2: UILabel!
    
    //アラートビューコントローラー
    let alert = UIAlertController()

    @IBAction func alert(_ sender: Any) {
        //アラートコントローラー
        let alert = UIAlertController(title: "アラート", message: "テキストを入力せよ", preferredStyle: .alert)
        
        //OKボタンを生成
        let okAction = UIAlertAction(title: "OK", style: .default) { (action:UIAlertAction) in
            //複数のtextFieldのテキストを格納
            guard let textFields:[UITextField] = alert.textFields else {return}
            //textからテキストを取り出していく
            for textField in textFields {
                switch textField.tag {
                    case 1: self.label.text = textField.text
                    case 2: self.label2.text = textField.text
                    default: break
                }
            }
        }
        //OKボタンを追加
        alert.addAction(okAction)
        
        //Cancelボタンを生成
        let cancelAction = UIAlertAction(title: "Cancel", style: .cancel, handler: nil)
        //Cancelボタンを追加
        alert.addAction(cancelAction)
        
        //TextFieldを2つ追加
        alert.addTextField { (text:UITextField!) in
            text.placeholder = "好きなテキストを入力してね"
            //1つ目のtextFieldのタグ
            text.tag = 1
        }
        alert.addTextField { (text:UITextField!) in
            text.placeholder = "好きなテキストを入力してね"
            //2つ目のtextFieldのタグ
            text.tag = 2
        }
        
        //アラートを表示
        present(alert, animated: true, completion: nil)
    }
    
}