かなり些細な質問です。しかし、私は何もオンラインで見つけることができません。
ユーザーがテキストフィールド内のテキストを編集できないようにする必要があります。そのため、テキストをクリックしてもキーボードは表示されません。
何か案は?
プログラムによる解決策、またはストーリーボードを介してそれが可能であれば素晴らしいでしょう。
これを試して:
Swift 2.:
textField.userInteractionEnabled = false
Swift 3.:
textField.isUserInteractionEnabled = false
または、ストーリーボードで「ユーザーインタラクションを有効にする」のチェックを外します
別の解決策として、コントローラーを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
}
ストーリーボードには、2つの選択肢があります。
これらの選択肢の違いは次のとおりです。
画面に表示するUITextfildの外観。
コード内:
textfield.enable = false
textfield.userInteractionEnabled = NO
Swift 3用に更新
textField.isEnabled = false
textfield.isUserInteractionEnabled = false
私は昔のようにそれをするのが好きです。次のようなカスタム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)
}
}
ユーザーがUILabel
の内容を変更できないようにする場合は、代わりにUITextField
を使用できます
プログラムによる解決策は、enabled
プロパティを使用することです。
yourTextField.enabled = false
ストーリーボードでそれを行う方法:
UITextField
のプロパティのEnabledチェックボックスをオフにします
「userInteractionEnabled」の代わりに"isEditable"を使用する必要があります。UITextfieldがより多くの行である場合、表示される行がスクロール可能なためです。 「userInteractionEnabled」はスクロールに対して機能しません。
Swift 4
textView.isEditable = false
Swift 4.2/Xcode 10.1:
動作のチェックを外してくださいEnabledストーリーボード->属性インスペクターで。