Подтвердить что ты не робот

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

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

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

Любые идеи?

Программное решение или если это возможно через раскадровки, было бы здорово.

4b9b3361

Ответ 1

Попробуйте следующее:

Swift 2.0:

textField.userInteractionEnabled = false

Swift 3.0:

textField.isUserInteractionEnabled = false

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

enter image description here

Ответ 2

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

Ответ 3

В раскадровке у вас есть два варианта:

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

enter image description here

  1. установить представление 'useraction enable' false

enter image description here

Различия между этими выборами:

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

enter image description here

  • Сначала устанавливается разрешение управления. Вы можете видеть, что цвет backgroud изменилось.
  • Во втором задан вид "Включение взаимодействия с пользователем". Цвет задней панели не изменяется.

Внутри кода:

  • textfield.enable = false
  • textfield.userInteractionEnabled = NO

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

    • textField.isEnabled = false
    • textfield.isUserInteractionEnabled = false

Ответ 4

Мне нравится делать это как старые времена. Вы просто используете пользовательский 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)
    }

}

Ответ 5

Если вы хотите сделать это, не отключая взаимодействие с пользователем. В моем случае я использую (или, скорее, неправильно) isFocused

self.myField.inputView = UIView()

Таким образом, он будет фокусироваться, но клавиатура не будет отображаться.

Ответ 6

вы можете использовать UILabel вместо этого, если вы не хотите, чтобы пользователь мог изменять что-либо в вашем UITextField

Программным решением было бы использовать свойство enabled:

yourTextField.enabled = false

Способ сделать это в раскадровке:

Снимите флажок Включено в свойствах вашего UITextField

enter image description here

Ответ 7

Swift 4.2/Xcode 10.1:

Просто снимите флажок Поведение Включено в вашей раскадровке → Инспектор атрибутов.

Ответ 8

Вы должны использовать "isEditable" вместо "userInteractionEnabled", потому что, если поле UIText содержит больше строк, то ту, которую вы видите и которую можно прокручивать. "UserInteractionEnabled" не будет работать для прокрутки.

Swift 4

textView.isEditable = false