Ответ 1
Попробуйте следующее:
Swift 2.0:
textField.userInteractionEnabled = false
Swift 3.0:
textField.isUserInteractionEnabled = false
Или в раскадровке снимите флажок "Включение пользователя"
довольно тривиальный вопрос, я знаю. Но я ничего не могу найти в Интернете.
Мне нужно отключить пользователя от возможности редактировать текст внутри текстового поля. Так что при нажатии на текст клавиатура не появляется.
Любые идеи?
Программное решение или если это возможно через раскадровки, было бы здорово.
Попробуйте следующее:
Swift 2.0:
textField.userInteractionEnabled = false
Swift 3.0:
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
}
В раскадровке у вас есть два варианта:
Различия между этими выборами:
появление UITextfild для отображения на экране.
Внутри кода:
textfield.enable = false
textfield.userInteractionEnabled = NO
Обновлено для Swift 3
textField.isEnabled = false
textfield.isUserInteractionEnabled = false
Мне нравится делать это как старые времена. Вы просто используете пользовательский UITextField Class, как этот:
//
// 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)
}
}
Если вы хотите сделать это, не отключая взаимодействие с пользователем.
В моем случае я использую (или, скорее, неправильно) isFocused
self.myField.inputView = UIView()
Таким образом, он будет фокусироваться, но клавиатура не будет отображаться.
вы можете использовать UILabel
вместо этого, если вы не хотите, чтобы пользователь мог изменять что-либо в вашем UITextField
Программным решением было бы использовать свойство enabled
:
yourTextField.enabled = false
Способ сделать это в раскадровке:
Снимите флажок Включено в свойствах вашего UITextField
Swift 4.2/Xcode 10.1:
Просто снимите флажок Поведение Включено в вашей раскадровке → Инспектор атрибутов.
Вы должны использовать "isEditable" вместо "userInteractionEnabled", потому что, если поле UIText содержит больше строк, то ту, которую вы видите и которую можно прокручивать. "UserInteractionEnabled" не будет работать для прокрутки.
Swift 4
textView.isEditable = false