web-dev-qa-db-ja.com

swiftのUITextfieldのユーザー入力を無効にする

かなり些細な質問です。しかし、私は何もオンラインで見つけることができません。

ユーザーがテキストフィールド内のテキストを編集できないようにする必要があります。そのため、テキストをクリックしてもキーボードは表示されません。

何か案は?

プログラムによる解決策、またはストーリーボードを介してそれが可能であれば素晴らしいでしょう。

42
Matt Spoon

これを試して:

Swift 2.

textField.userInteractionEnabled = false

Swift 3.

textField.isUserInteractionEnabled = false

または、ストーリーボードで「ユーザーインタラクションを有効にする」のチェックを外します

enter image description here

88
Vlad

別の解決策として、コントローラーをUITextFieldDelegateとして宣言し、このコールバックを実装します。

@IBOutlet weak var myTextField: UITextField!

override func viewDidLoad() {
    super.viewDidLoad()

    myTextField.delegate = self
}

func textFieldShouldBeginEditing(textField: UITextField) -> Bool {
    if textField == myTextField {
        return false; //do not show keyboard nor cursor
    }
    return true
}
39
Duyen-Hoa

ストーリーボードには、2つの選択肢があります。

  1. コントロールの「enable」をfalseに設定します。

enter image description here

  1. ビューの「ユーザーインタラクションを有効にする」をfalseに設定します

enter image description here

これらの選択肢の違いは次のとおりです。

画面に表示するUITextfildの外観。

enter image description here

  1. まず、コントロールの有効化を設定します。背景色が変更されていることがわかります。
  2. 次に、ビューの「ユーザーインタラクションを有効にする」を設定します。背景色は変更されません。

コード内:

  1. textfield.enable = false
  2. textfield.userInteractionEnabled = NO

    Swift 3用に更新

    1. textField.isEnabled = false
    2. textfield.isUserInteractionEnabled = false
21
dusty

私は昔のようにそれをするのが好きです。次のようなカスタムUITextFieldクラスを使用するだけです。

//
//  ReadOnlyTextField.Swift
//  MediFormulas
//
//  Created by Oscar Rodriguez on 6/21/17.
//  Copyright © 2017 Nica Code. All rights reserved.
//

import UIKit

class ReadOnlyTextField: UITextField {

    /*
    // Only override draw() if you perform custom drawing.
    // An empty implementation adversely affects performance during animation.
    override func draw(_ rect: CGRect) {
        // Drawing code
    }
    */

    override init(frame: CGRect) {
        super.init(frame: frame)

        // Avoid keyboard to show up
        self.inputView = UIView()
    }

    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)

        // Avoid keyboard to show up
        self.inputView = UIView()
    }

    override func canPerformAction(_ action: Selector, withSender sender: Any?) -> Bool {
        // Avoid cut and paste option show up
        if (action == #selector(self.cut(_:))) {
            return false
        } else if (action == #selector(self.paste(_:))) {
            return false
        }

        return super.canPerformAction(action, withSender: sender)
    }

}
2
mld.oscar

ユーザーがUILabelの内容を変更できないようにする場合は、代わりにUITextFieldを使用できます

プログラムによる解決策は、enabledプロパティを使用することです。

yourTextField.enabled = false

ストーリーボードでそれを行う方法:

UITextFieldのプロパティのEnabledチェックボックスをオフにします

enter image description here

0
Novarg

「userInteractionEnabled」の代わりに"isEditable"を使用する必要があります。UITextfieldがより多くの行である場合、表示される行がスクロール可能なためです。 「userInteractionEnabled」はスクロールに対して機能しません。

Swift 4

textView.isEditable = false
0
Tiago Mendes

Swift 4.2/Xcode 10.1:

動作のチェックを外してくださいEnabledストーリーボード->属性インスペクターで。

0
FRIDDAY