快速禁用 UITextfield 的用户输入
Posted
技术标签:
【中文标题】快速禁用 UITextfield 的用户输入【英文标题】:Disabling user input for UITextfield in swift 【发布时间】:2015-06-29 18:16:32 【问题描述】:很简单的问题,我知道。但是我在网上找不到任何东西。
我需要禁止用户编辑文本字段内的文本。这样当点击文本时,键盘就不会出现了。
有什么想法吗?
一个程序化的解决方案,或者如果可以通过情节提要,那就太好了。
【问题讨论】:
改用标签? 【参考方案1】:试试这个:
Swift 2.0:
textField.userInteractionEnabled = false
Swift 3.0:
textField.isUserInteractionEnabled = false
或者在情节提要中取消选中“启用用户交互”
【讨论】:
谢谢。我查看了属性检查器。也许我只是不是很细心-___-【参考方案2】:如果您不希望用户能够修改您的 UITextField
中的任何内容,您可以改用 UILabel
编程解决方案是使用enabled
属性:
yourTextField.enabled = false
在情节提要中做到这一点的方法:
取消选中UITextField
属性中的已启用复选框
【讨论】:
【参考方案3】:另一种解决方案,将你的控制器声明为 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
【讨论】:
Swift 4: func textFieldShouldBeginEditing(_ textField: UITextField) 我最喜欢这个解决方案,原因如下:我可能想在我的字段中禁用文本输入,但仍会收到字段的leftView
或rightView
的触摸事件。这方面的一个例子:假设我希望文本字段充当下拉菜单。我不希望用户能够输入他或她想要的任何内容,但我想知道他们是否单击了我的文本字段rightView
中的“下拉”箭头。当然还有其他下拉解决方案,但这看起来很干净,并且允许您使用与其他文本字段相同的样式,而无需创建完全不同的类/对象。【参考方案4】:
在故事板中你有两个选择:
-
将控件的“启用”设置为 false。
-
将视图的“用户交互启用”设置为 false
这些选择之间的区别是:
要在屏幕上显示的 UITextfild 的外观。
-
首先是设置控件的启用。你可以看到背景颜色是
改变了。
其次是设置视图的“用户交互启用”。背景颜色没有改变。
代码内:
textfield.enable = false
textfield.userInteractionEnabled = NO
为 Swift 3 更新
textField.isEnabled = false
textfield.isUserInteractionEnabled = false
【讨论】:
我喜欢您提供的屏幕截图以显示两者之间的区别。 ??【参考方案5】:我喜欢像以前那样做。您只需使用这样的自定义 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)
【讨论】:
【参考方案6】:Swift 4.2 / Xcode 10.1:
只需在情节提要 -> 属性检查器中取消选中行为已启用。
【讨论】:
它似乎已启用而不是可编辑。变了吗? 你是对的,它已启用。打字错误。谢谢【参考方案7】:如果您想在保持用户交互的同时执行此操作。
就我而言,我正在使用(或更确切地说是滥用)isFocused
self.myField.inputView = UIView()
这样它会聚焦但键盘不会出现。
【讨论】:
正是我正在寻找的行为!谢谢【参考方案8】:在 swift 5 中,我使用以下代码禁用了文本字段
override func viewDidLoad()
super.viewDidLoad()
self.textfield.isEnabled = false
//e.g
self.design.isEnabled = false
【讨论】:
以上是关于快速禁用 UITextfield 的用户输入的主要内容,如果未能解决你的问题,请参考以下文章
在 UITableView 中编辑 UITextField(启用/禁用输入)?
根据 UITextField 中的值禁用按钮只能工作一次(RxSwift)
UITextField的代理方法:textField:shouldChangeCharactersInRange:replacementString