🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

解決済

1回答

2546閲覧

textFieldが全て埋まった時、Buttonを押せる様にしたい

samusara

総合スコア21

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

0クリップ

投稿2019/09/10 03:29

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
どうぞよろしくお願いします

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

こんなので良いと思いますけどねえ。

swift

1@objc func didChangeNotification(notification: Notification) { 2 Button.isEnabled = textField1.text?.isEmpty == false && textField2.text?.isEmpty == false 3}

投稿2019/09/10 04:30

takabosoft

総合スコア8356

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

samusara

2019/09/10 07:12

ご回答ありがとうございます!!! シンプルで綺麗なコードですね! そしてきちんと動作致しました。 途中の && は色んなことに使えそうです。 大変勉強になりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問