Отключение пользовательского ввода для UITextfield в swift

довольно банальный вопрос, я знаю. Но я ничего не могу найти в интернете.

Мне нужно отключить пользователя от возможности редактировать текст внутри текстового поля. Так что при нажатии на текст клавиатура не отображается.

какие идеи?

программное решение, или, если это возможно, с помощью раскадровки было бы здорово.

5 ответов


попробуйте это:

Swift 2.0:

textField.userInteractionEnabled = false

Swift 3.0:

textField.isUserInteractionEnabled = false

или в раскадровке снимите флажок "взаимодействие с пользователем включено"

enter image description here


другое решение, объявите свой контроллер как 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
}

в раскадровке у вас есть два выбора:

  1. установите для элемента управления "enable" значение false.

enter image description here

  1. установите представление "включить взаимодействие с пользователем" false

enter image description here

разница между этими choise является:

внешний вид UITextfild для отображения на экране.

enter image description here

  1. сначала устанавливается элемент управления enable. Вы можете увидеть backgroud цвет измененный.
  2. второй набор пользователей вид взаимодействия позволит. Цвет backgroud не изменяется.

в коде:

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

    обновлено для Swift 3

    1. textField.isEnabled = false
    2. 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

enter image description here