ストーリーボード未使用で作っています。
モーダルビューからデータを受け取るドキュメントを参考に、
ModalViewControllerにあるchangeButtonがタップされ、
UITextField.textの文字が1文字を超えていれば、
下記のコードの様に.isEnabled = trueと判定したいのですが、できていません。
コードはviewDidLoad内に書いています。
let one = 1 let text = textField.text! if text.count > one { changeButton.isEnabled = true } else if text.count < one { changeButton.isEnabled = false }
他にviewDidLoad内には
textField.delegate = self textField.text = ""
などを用意し、プロトコルとしてUITextFieldDelegateも追加しています。
他にfuncを作り、changeButtonの前に判定などが必要なのでしょうか?試していますが分かりません。
見ていただければとても助かります。よろしくお願いします。
●
6/22追記 参考ドキュメントに少し手を加えた下記コードを追加しました。
import UIKit class HomeViewController: UIViewController { var textFromModal = "" { didSet { updatelabel(text: textFromModal) } } var textLabel = UILabel() override func viewDidLoad() { super.viewDidLoad() view.backgroundColor = .white set() } func set() { textLabel = UILabel(frame: CGRect(x: 0, y: 0, width: view.bounds.width - 20, height: 30)) textLabel.center = CGPoint(x: view.center.x, y: view.center.y - 50) textLabel.textAlignment = .center textLabel.text = "" view.addSubview(textLabel) // let modalButton = UIButton(frame: CGRect(x: 0, y: 0, width: 100, height: 30)) modalButton.center = view.center modalButton.setTitle("開く", for: .normal) modalButton.setTitleColor(UIColor.blue, for: .normal) modalButton.addTarget(self, action: #selector(pushModal(sender:)), for: .touchUpInside) view.addSubview(modalButton) } @objc func pushModal(sender:UIButton) { let modal = ModalViewController(nibName: nil, bundle: nil) modal.modalTransitionStyle = .crossDissolve present(modal, animated: true, completion: nil) } func updatelabel(text: String) { textLabel.text = "I'm, (text)" } }
import UIKit class ModalViewController: UIViewController, UITextFieldDelegate { var changeButton = UIButton() var textField = UITextField() override func viewDidLoad() { super.viewDidLoad() set() } func set() { view.backgroundColor = .gray let cancelButton = UIButton(frame: CGRect(x: 0, y: 0, width: 100, height: 30)) cancelButton.center = CGPoint(x: view.center.x - 100, y: view.center.y) cancelButton.setTitle("キャンセル", for: .normal) cancelButton.setTitleColor(UIColor.black, for: .normal) cancelButton.addTarget(self, action: #selector(pushDismiss(sender:)), for: .touchUpInside) view.addSubview(cancelButton) // changeButton = UIButton(frame: CGRect(x: 0, y: 0, width: 100, height: 30)) changeButton.center = CGPoint(x: view.center.x + 100, y: view.center.y) changeButton.setTitle("変更", for: .normal) changeButton.setTitleColor(UIColor.black, for: .normal) changeButton.addTarget(self, action: #selector(pushChange(sender:)), for: .touchUpInside) view.addSubview(changeButton) //111 textField.delegate = self textField.text = "" textField = UITextField(frame: CGRect(x: 0, y: 0, width: view.bounds.width - 20, height: 30)) textField.center = CGPoint(x: view.center.x, y: view.center.y + 50) textField.placeholder = "input your name" textField.backgroundColor = .white view.addSubview(textField) } @objc func pushDismiss(sender:UIButton) { self.dismiss(animated: true, completion: nil) } //改行ボタンが押された際に呼ばれる func textFieldShouldReturn(_ textField: UITextField) -> Bool { // 改行ボタンが押されたらKeyboardを閉じる処理. textField.resignFirstResponder() if textField.text == "" { changeButton.isEnabled = false } else { changeButton.isEnabled = true } return true } //UITextFieldが編集された後に呼ばれる func textFieldDidEndEditing(_ textField: UITextField) { if textField.text == "" { changeButton.isEnabled = false } else { changeButton.isEnabled = true } } @objc func pushChange(sender:UIButton) { textField.resignFirstResponder() //強制ダウンキャスト let originVc = presentingViewController as! HomeViewController originVc.textFromModal = textField.text! self.dismiss(animated: true, completion: nil) } }
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2018/06/22 02:55
2018/06/22 03:00
退会済みユーザー
2018/06/22 03:07
2018/06/22 03:34 編集
退会済みユーザー
2018/06/22 03:42
2018/06/22 03:46
退会済みユーザー
2018/06/22 04:37 編集
退会済みユーザー
2018/06/22 04:42
2018/06/22 04:50
2018/06/22 04:52
退会済みユーザー
2018/06/22 05:26
2018/06/22 08:40
退会済みユーザー
2018/06/22 15:35