textFieldが複数ありまして、それぞれ入力された時初めてButtonがグレーアウトから押せる状態にしたいのです。パーツの配置は図の様になります。
そこでhttps://teratail.com/questions/61685のベストアンサーを参考に以下の様なコードを書きました。
import UIKit
class ViewController: UIViewController,UITextFieldDelegate {
@IBOutlet weak var textField1: UITextField! @IBOutlet weak var textField2: UITextField! @IBOutlet weak var Button: UIButton! override func viewDidLoad() { super.viewDidLoad() Button.isEnabled = false // 入力値が変更された時に呼ばれる通知を登録 NotificationCenter.default.addObserver( self, selector: #selector(self.didChangeNotification(notification:)), name: UITextField.textDidChangeNotification, object: nil ) } var isInputTextField1 = false var isInputTextField2 = false // 入力値が変更された時に呼ばれるメソッド @objc func didChangeNotification(notification: Notification) { if let textField = notification.object as? UITextField { if let text = textField.text { switch textField.tag { case textField1.viewWithTag(1).hashValue: isInputTextField1 = text.isEmpty ? false : true case textField2.viewWithTag(2).hashValue: isInputTextField2 = text.isEmpty ? false : true default: break } } } Button.isEnabled = isInputTextField1 || isInputTextField2 ? true : false } // 通知の解除 deinit { NotificationCenter.default.removeObserver(self) } override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) { view.endEditing(true) }
}
このコードではボタンがグレーアウトから復帰せず、押すことができません。
私が自信のないコード部分は
case textField1.viewWithTag(1).hashValue: isInputTextField1 = text.isEmpty ? false : true
case textField2.viewWithTag(2).hashValue: isInputTextField2 = text.isEmpty ? false : true
以上です。
textFieldにそれぞれタグを設定してみたのですがどうもこれがうまく動作しない原因に思えます。
どなたかご教授願えないでしょうか?
Xcode 10.3
swift 5.0.1
macOS Mojave 10.14.5
どうぞよろしくお願いします
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/09/10 07:12
2019/09/10 07:42