在 swift 中禁用 UITextfield 的用户输入
Disabling user input for UITextfield in swift
我知道这是一个非常微不足道的问题。但是我在网上找不到任何东西。
我需要禁止用户编辑文本字段内的文本。这样当点击文本时,键盘不会出现。
有什么想法吗?
一个程序化的解决方案,或者如果可能的话,通过故事板会很棒。
试试这个:
Swift 2.0:
textField.userInteractionEnabled = false
Swift 3.0:
textField.isUserInteractionEnabled = false
或在情节提要中取消选中 "User Interaction Enabled"
如果您不希望用户能够修改您 UITextField
中的任何内容,则可以改用 UILabel
编程解决方案是使用 enabled
属性:
yourTextField.enabled = false
一种在故事板中实现的方法:
取消选中 UITextField
属性中的 Enabled 复选框
另一种解决方案,将您的控制器声明为 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。
- 设置视图的'user interaction enable' false
这些选择的区别是:
要在屏幕中显示的 UITextfild 的外观。
- 首先是设置控件的启用。可以看到背景颜色是
改变了。
- 其次是设置视图的'User interaction enable'。背景颜色未更改。
代码内:
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)
}
}
Swift 4.2 / Xcode 10.1:
只需在故事板 -> 属性检查器中取消选中行为 已启用。
如果您想在保持用户交互的同时执行此操作。
就我而言,我正在使用(或者更确切地说是误用)isFocused
self.myField.inputView = UIView()
这样它会聚焦但不会显示键盘。
在swift5中,我使用了下面的代码来禁用文本框
override func viewDidLoad() {
super.viewDidLoad()
self.textfield.isEnabled = false
//e.g
self.design.isEnabled = false
}
textField.isUserInteractionEnabled = 假
我知道这是一个非常微不足道的问题。但是我在网上找不到任何东西。
我需要禁止用户编辑文本字段内的文本。这样当点击文本时,键盘不会出现。
有什么想法吗?
一个程序化的解决方案,或者如果可能的话,通过故事板会很棒。
试试这个:
Swift 2.0:
textField.userInteractionEnabled = false
Swift 3.0:
textField.isUserInteractionEnabled = false
或在情节提要中取消选中 "User Interaction Enabled"
如果您不希望用户能够修改您 UITextField
UILabel
编程解决方案是使用 enabled
属性:
yourTextField.enabled = false
一种在故事板中实现的方法:
取消选中 UITextField
另一种解决方案,将您的控制器声明为 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。
- 设置视图的'user interaction enable' false
这些选择的区别是:
要在屏幕中显示的 UITextfild 的外观。
- 首先是设置控件的启用。可以看到背景颜色是 改变了。
- 其次是设置视图的'User interaction enable'。背景颜色未更改。
代码内:
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)
}
}
Swift 4.2 / Xcode 10.1:
只需在故事板 -> 属性检查器中取消选中行为 已启用。
如果您想在保持用户交互的同时执行此操作。
就我而言,我正在使用(或者更确切地说是误用)isFocused
self.myField.inputView = UIView()
这样它会聚焦但不会显示键盘。
在swift5中,我使用了下面的代码来禁用文本框
override func viewDidLoad() {
super.viewDidLoad()
self.textfield.isEnabled = false
//e.g
self.design.isEnabled = false
}
textField.isUserInteractionEnabled = 假