是否有禁止粘贴到 UITextField 的首选技术?
Is there a preferred technique to prohibit pasting into a UITextField?
我已经阅读了针对 Swift 的不同版本提供的几种解决方案。
我看不到的是如何实现扩展——如果这是实现它的最佳方式的话。
我确定这里有一个明显的方法,预计会首先为人所知,但我没有看到。我添加了此扩展程序,我的 none 个文本字段受到影响。
extension UITextField {
open override func canPerformAction(_ action: Selector, withSender sender: Any?) -> Bool {
return action == #selector(UIResponderStandardEditActions.cut) || action == #selector(UIResponderStandardEditActions.copy)
}
}
您不能使用扩展覆盖 class 方法。
来自 docs“注意扩展可以向类型添加新功能,但它们不能覆盖现有功能。”
您需要的是子class UITextField 并在那里覆盖您的方法:
仅禁用粘贴功能:
class TextField: UITextField {
override func canPerformAction(_ action: Selector, withSender sender: Any?) -> Bool {
if action == #selector(UIResponderStandardEditActions.paste) {
return false
}
return super.canPerformAction(action, withSender: sender)
}
}
用法:
let textField = TextField(frame: CGRect(x: 50, y: 120, width: 200, height: 50))
textField.borderStyle = .roundedRect
view.addSubview(textField)
只允许复制和剪切:
class TextField: UITextField {
override func canPerformAction(_ action: Selector, withSender sender: Any?) -> Bool {
[#selector(UIResponderStandardEditActions.cut),
#selector(UIResponderStandardEditActions.copy)].contains(action)
}
}
班次 5
// class TextField: UITextField
extension UITextField {
open override func canPerformAction(_ action: Selector, withSender sender: Any?) -> Bool {
return action == #selector(UIResponderStandardEditActions.cut) || action == #selector(UIResponderStandardEditActions.copy)
}
}
我已经阅读了针对 Swift 的不同版本提供的几种解决方案。
我看不到的是如何实现扩展——如果这是实现它的最佳方式的话。
我确定这里有一个明显的方法,预计会首先为人所知,但我没有看到。我添加了此扩展程序,我的 none 个文本字段受到影响。
extension UITextField {
open override func canPerformAction(_ action: Selector, withSender sender: Any?) -> Bool {
return action == #selector(UIResponderStandardEditActions.cut) || action == #selector(UIResponderStandardEditActions.copy)
}
}
您不能使用扩展覆盖 class 方法。
来自 docs“注意扩展可以向类型添加新功能,但它们不能覆盖现有功能。”
您需要的是子class UITextField 并在那里覆盖您的方法:
仅禁用粘贴功能:
class TextField: UITextField {
override func canPerformAction(_ action: Selector, withSender sender: Any?) -> Bool {
if action == #selector(UIResponderStandardEditActions.paste) {
return false
}
return super.canPerformAction(action, withSender: sender)
}
}
用法:
let textField = TextField(frame: CGRect(x: 50, y: 120, width: 200, height: 50))
textField.borderStyle = .roundedRect
view.addSubview(textField)
只允许复制和剪切:
class TextField: UITextField {
override func canPerformAction(_ action: Selector, withSender sender: Any?) -> Bool {
[#selector(UIResponderStandardEditActions.cut),
#selector(UIResponderStandardEditActions.copy)].contains(action)
}
}
班次 5
// class TextField: UITextField
extension UITextField {
open override func canPerformAction(_ action: Selector, withSender sender: Any?) -> Bool {
return action == #selector(UIResponderStandardEditActions.cut) || action == #selector(UIResponderStandardEditActions.copy)
}
}