如何解决使 UiTextField 只接受粘贴选项 - Swift
我想让一个 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
}
}
解决方法
您可以通过使用长按手势识别器创建 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
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。