hmhmsh
10/9/2018 - 10:31 AM

TextAlertController

UIAlertController with TextField

struct TextAlertController {
    func create(title: String, message: String, preferredStyle: UIAlertController.Style = .alert, defaultText: String? = nil, completion: @escaping (String?) -> Void) -> UIAlertController {
        let actionController = UIAlertController(title: title, message: message, preferredStyle: preferredStyle)
        
        let ok = UIAlertAction(title: "OK", style: .default, handler: { [weak actionController] (_) -> Void in
            guard let textField = actionController?.textFields?.first else {
                completion(nil)
                return
            }
            
            guard let text = textField.text,
                text.count > 0 else {
                completion(nil)
                return
            }
            
            completion(text)
        })
        actionController.addAction(ok)
        
        let cancel = UIAlertAction(title: "キャンセル", style: .cancel, handler: nil)
        actionController.addAction(cancel)
        
        actionController.addTextField { textField in
            textField.text = defaultText
        }
        
        return actionController
    }
}
let textAlertController = TextAlertController().create(title: "Item名の変更", message: "Item名を入力してください", defaultText: label?.text) { [weak self] text in
  guard let text = text else {
      return
  }
    self?.label?.text = text
}
self.present(textAlertController, animated: true, completion: nil)