これはこのフォーラムの最初の質問です。 UITextFieldにテキストがある場合にのみUIBarButtonItemを有効にする方法を知りたいと思います。私はSwift 2ではこれを行う方法の多くの例を見てきましたが、Swift 3ではそうではありませんでした。これは、いくつかのデータをコアデータに保存するための簡単なアプリケーションです。私はUITextFieldをチェックして、その場でテキストを確認する方法がわからないので、UIOutlets以外のコードを表示するコードはありません。TextFieldが空でないことを確認した後、UIBarItemを有効にする方法
答えて
textFieldの長さを確認する必要があります。あなたの一番上に
//MARK: - UITextFieldDelegate
func textFieldDidEndEditing(_ textField: UITextField) {
if let text = exampleTextFiled.text {
exampleBarButtonItem.isEnabled = text.characters.count > 0
}
}
あなたは
UITextFieldDelegate
class ViewController: UIViewController, UITextFieldDelegate {
@IBOutlet var exampleTextField: UITextField!
@IBOutlet var exampleBarButtonItem: UIBarButtonItem!
// Your code
}
を追加し、ストーリーボードにあなたはCtrlキーを押しながらドラッグすることができますテキストフィールドからの代理人を追加するコントローラする必要がありますコントローラ。
私はInterface BuilderとStoryboardsを使用しないことをお勧めします。開発者は「ダンプダウン」します。
1)テキストフィールドは、コールバックメソッドまたはリターン/行わキーをタップし、ユーザーのようなテキストフィールドイベントの「デリゲート」のメソッドを持っています:
とにかく、このアルゴリズムは、このようなものです。
まず、テキストフィールドにデリゲートがビューコントローラであることを伝える必要があります。
2)あなたは、あなたのテキストフィールドには任意のテキストを持っている場合UITextFieldには伝えることのために必要なのUITextFieldのデリゲートメソッド(https://developer.apple.com/reference/uikit/uitextfielddelegate)
3)10+のiOS用に新しく利用可能hasText
方法は(ある)を定義します。存在する場合は、バーボタン項目を有効にし、そうでない場合は無効にします。あなたが代わりにあなたのtextField.text?
プロパティをアンラップへの結合オプションif let
を使用することができます
、その後、text.characters.count
をチェックすると、そのような0より大きい:
if let text = textField.text {
navigationItem.rightBarButtonItem?.isEnabled = text.characters.count > 0
}
したい場合、これは(iOSの10の前にそれを行うための従来の方法であります)古いIOSのバージョンをサポートする:D
満杯のコードは以下である:
class ViewController: UIViewController, UITextFieldDelegate {
@IBOutlet var myTextField:UITextField!
...
override func viewDidLoad() {
super.viewDidLoad()
// self is referring to this view controller
...
myTextField.returnKeyType = UIReturnKeyType.done
myTextField.delegate = self
}
// UITextField Delegate Methods
func textFieldDidEndEditing(_ textField: UITextField) {
// get the navigation bar button (right bar button in my case)
// and set its "isEnabled" property depending on whether
// the textField has any text using "hasText" of UITextField
navigationItem.rightBarButtonItem?.isEnabled = textField.hasText
}
func textFieldShouldReturn(_ textField: UITextField) -> Bool {
hideKeybaord()
return false
}
// UITouches delegate methods for extra user experience polish
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
// hides keyboard when user taps on the background
hideKeybaord()
}
// resusable hideKeyboard method
func hideKeybaord() {
myTextField.resignFirstResponder()
// in case you need to hide all other text fields in the future
// textField2.resignFirstResponder()
// textField3.resignFirstResponder()
}
}
答えとコードをお寄せいただきありがとうございます。現時点ではハードウェアキーボードを使用してテキストを入力していますので、iOSキーボードで作業するコードを見ていきます –
ハードウェアキーボードですか?たとえば、Logitechのサードパーティのキーボードを使用するアプリを構築していますか? – Zhang
いいえ、サードパーティのキーボードを利用するためのアプリを構築していません。私はSwiftを学んでおり、私はコアデータなどを学ぶための単純なアプリを作っています。私はテキストを入力するためにシミュレータのハードウェアキーボードを使用しています。次に、画面上のキーボードの使用を検討します。 –
B私の問題を解決するために実装したコードはelowです。 iOSキーボードは考慮されていません。最後の機能は、SceneのTextFieldからコントローラ(ViewController.swift)に追加された@IBAction(Editing Changed)です。シーンのTextFieldを右クリックして、アクションを選択し、編集を変更し、View Controllerにドラッグしました。あなたのiuputとコードのおかげで!
import UIKit
class ViewController: UIViewController, UITextFieldDelegate {
// Add Outlet
@IBOutlet weak var tvShowName: UITextField!
@IBOutlet weak var saveButton: UIBarButtonItem!
// Add functions
@IBAction private func saveButton(_ sender: UIBarButtonItem) {
let context = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext
let newTVShow = TVShows(context: context)
newTVShow.name = tvShowName.text
do {
try context.save()
navigationController!.popViewController(animated: true)
} catch {
let alert = UIAlertController(title: "Oops!", message: "Failed to save the TV Show", preferredStyle: UIAlertControllerStyle.alert)
alert.addAction(UIAlertAction(title: "OK", style: UIAlertActionStyle.default, handler: nil))
self.present(alert, animated: true, completion: nil)
}
}
@IBAction private func cancelButton(_ sender: UIBarButtonItem) {
// Code for cancel
navigationController!.popViewController(animated: true)
}
override func viewDidLoad() {
super.viewDidLoad()
saveButton.isEnabled = false
}
@IBAction func tvShowTextFieldEditChanged(_ sender: UITextField) {
if let text = tvShowName.text{
saveButton.isEnabled = text.characters.count > 0
}
}
}
- 1. URLが有効であることを確認する方法
- 2. idTokenが有効であることを確認する方法
- 3. アソシエーションが有効であることを確認する方法
- 4. Cの空きメモリ:有効なポインタを確認する方法?
- 5. Rails 3.2でチェックボックスが有効でないことを確認しました
- 6. PHPで入力が有効でないことを確認しました
- 7. 有効なページからのリクエストが有効であることを確認する方法ノード
- 8. uri文字列が有効であることを確認する方法
- 9. posixソケットがまだ有効であることを確認する方法
- 10. Sudokuの各エントリが有効であることを確認する方法
- 11. ユーザが有効なWindows認証であることを確認するMVC3
- 12. リクエストが空でないことを確認するには
- 13. iPhoneで通知が有効になっていることを確認する方法
- 14. RLMResultsが無効になっていることを確認する方法は?
- 15. PostgreSQLで有効な電子メールアドレスを確認する方法は?
- 16. jQuery ABAルーティング番号が有効でないことを確認する
- 17. TextFieldを有効/無効にする方法SWIFT
- 18. デフォルトのadmin $共有がServerNameで有効になっていることを確認してください
- 19. QtDesignerで生成されたウィジェットポイントがQTimerで有効であることを確認する方法は?
- 20. イテレータがQTコンテナに有効であることを確認します。
- 21. 無線LANが有効であることを確認するにはインターネットに接続していない
- 22. 有効な割り当てを確認する方法
- 23. 文書にページがないことを確認する方法
- 24. WooCommerce:クーポンが有効であることを確認してください
- 25. BitmapDataが有効であることを確認してください
- 26. 画像が有効であることを確認してください
- 27. JSONとXMLが有効であることを確認しますか? c#
- 28. wifiオプションが有効かどうかを確認する方法
- 29. ポインタが有効かどうかを確認する方法?
- 30. SQL Server:CLRが有効かどうかを確認する方法?
@ P.Pawlusしたがって、3つの回答を見て、解決策を見つけました。私はあなたのコードに従っていましたが、動作させることができませんでしたが、私はあなたのソリューションを完全に理解していないかもしれません。私がやったことは、シーンのテキストフィールドから@IBActionアクションをコントローラーに追加して編集を変更し、上記を使ってBarButtonを有効または無効にしました。 –
@TerryLadden @IBActionをtextFieldに追加しないでください。ちょうど@IBOutletを追加してデリゲートする必要があります。テキストフィールドから 'View Contrller'(ストーリーボードのコントローラーの上の黄色い円)にCtrl +ドラッグすることでこれを行うことができます。 @IBOutletのあなたの名前を選んで代理する必要があります。これを行う方法がわからない場合は、https://developer.appleを参考にしてください。com/library/content/referencelibrary/GettingStarted/DevelopiOSAppsSwift/Lesson3.html - パート:UI要素のアウトレットを作成する –
私はドキュメントを読んで、これがどのように優れているかを理解しています。ありがとうございました。私はこの学習プロセスが大好きです。しかし、あなたのソリューションは一度動作しますが、テキストフィールドにテキストを入力し終えたら、テキストフィールドにテキストがあることを確認します。テキストフィールドにテキストがあるときだけ、保存ボタンを有効にします私が入力するように。私が私の答えで投稿したのと同じように、私はIBOutletを使ってそれを行うことができますが、テキストフィールドをデリゲートとして使用する方法を理解できないようです。助言がありますか? –