Отключение пользовательского ввода для UITextfield в swift
довольно банальный вопрос, я знаю. Но я ничего не могу найти в интернете.
Мне нужно отключить пользователя от возможности редактировать текст внутри текстового поля. Так что при нажатии на текст клавиатура не отображается.
какие идеи?
программное решение, или, если это возможно, с помощью раскадровки было бы здорово.
5 ответов
попробуйте это:
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
}
в раскадровке у вас есть два выбора:
- установите для элемента управления "enable" значение false.
- установите представление "включить взаимодействие с пользователем" false
разница между этими choise является:
внешний вид UITextfild для отображения на экране.
- сначала устанавливается элемент управления enable. Вы можете увидеть backgroud цвет измененный.
- второй набор пользователей вид взаимодействия позволит. Цвет backgroud не изменяется.
в коде:
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