使 UiTextField 只接受粘贴选项 - Swift
Posted
技术标签:
【中文标题】使 UiTextField 只接受粘贴选项 - Swift【英文标题】:Make UiTextField accept only paste option - Swift 【发布时间】:2021-02-26 18:03:57 【问题描述】:我想让 UiTextField 在长按时只接受粘贴选项,并且不像 ios 手机应用程序中那样显示键盘或光标。
我尝试使用委托方法移除键盘,但现在确实出现了粘贴选项。
你能帮帮我吗?
@IBOutlet weak var phoneNumberTf:UITextField?
didSet
phoneNumberTf?.backgroundColor = .clear
phoneNumberTf?.textAlignment = .left
phoneNumberTf?.font = UIFont().font_regular(ofSize: 38)
phoneNumberTf?.delegate = self
extension KeypadView: UITextFieldDelegate
func textFieldShouldBeginEditing(_ textField: UITextField) -> Bool
return false
【问题讨论】:
也许只用一个按钮代替...read这个值,然后把按钮的标题改成字符串 【参考方案1】:您可以通过使用长按手势识别器创建 UILabel 的子类并设置 UIMenuController 来实现此目的。
class MenuLabel: UILabel
override var canBecomeFirstResponder: Bool
return true
// MARK: - Init
override init(frame: CGRect)
super.init(frame: frame)
commonInit()
required init?(coder aDecoder: NSCoder)
super.init(coder: aDecoder)
commonInit()
private func commonInit()
isUserInteractionEnabled = true
addGestureRecognizer(
UILongPressGestureRecognizer(
target: self,
action: #selector(handleLongPressed(_:))
)
)
// MARK: - Actions
@objc internal func handleLongPressed(_ gesture: UILongPressGestureRecognizer)
guard let gestureView = gesture.view, let superView = gestureView.superview else
return
let menuController = UIMenuController.shared
guard !menuController.isMenuVisible, gestureView.canBecomeFirstResponder else
return
gestureView.becomeFirstResponder()
menuController.menuItems = [
UIMenuItem(
title: "Paste",
action: #selector(handlePasteAction(_:))
),
]
menuController.showMenu(from: superView, rect: gestureView.frame)
@objc internal func handlePasteAction(_ controller: UIMenuController)
self.text = UIPasteboard.general.string
长按后,UIMenuController 将显示一个粘贴选项,然后将 UILabel 的文本值设置为UIPasteboard.general.string
。
【讨论】:
以上是关于使 UiTextField 只接受粘贴选项 - Swift的主要内容,如果未能解决你的问题,请参考以下文章
如何限制 UITextField 在 Swift 中只接受数字?