Disabling user input for UITextfield in swift

后端 未结 8 719
半阙折子戏
半阙折子戏 2021-02-01 11:55

pretty trivial question, I know. But I can not find anything online.

I need to disable the user from being able to edit the text inside of a text field. So that when the

相关标签:
8条回答
  • 2021-02-01 12:32

    In storyboard you have two choise:

    1. set the control's 'enable' to false.

    enter image description here

    1. set the view's 'user interaction enable' false

    enter image description here

    The diffierence between these choise is:

    the appearance of UITextfild to display in the screen.

    enter image description here

    1. First is set the control's enable. You can see the backgroud color is changed.
    2. Second is set the view's 'User interaction enable'. The backgroud color is NOT changed.

    Within code:

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

      Updated for Swift 3

      1. textField.isEnabled = false
      2. textfield.isUserInteractionEnabled = false
    0 讨论(0)
  • 2021-02-01 12:35

    I like to do it like old times. You just use a custom UITextField Class like this one:

    //
    //  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)
        }
    
    }
    
    0 讨论(0)
  • 2021-02-01 12:36

    Swift 4.2 / Xcode 10.1:

    Just uncheck behavior Enabled in your storyboard -> attributes inspector.

    0 讨论(0)
  • 2021-02-01 12:41

    you can use UILabel instead if you don't want the user to be able to modify anything in your UITextField

    A programmatic solution would be to use enabled property:

    yourTextField.enabled = false
    

    A way to do it in a storyboard:

    Uncheck the Enabled checkbox in the properties of your UITextField

    enter image description here

    0 讨论(0)
  • 2021-02-01 12:45

    Another solution, declare your controller as UITextFieldDelegate, implement this call-back:

    @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
    }
    
    0 讨论(0)
  • 2021-02-01 12:46

    Try this:

    Swift 2.0:

    textField.userInteractionEnabled = false
    

    Swift 3.0:

    textField.isUserInteractionEnabled = false
    

    Or in storyboard uncheck "User Interaction Enabled"

    enter image description here

    0 讨论(0)
提交回复
热议问题