我希望UITextField只允许选择,复制和共享。这是到目前为止的情况。
override func canPerformAction(_ action: Selector, withSender sender: Any?) -> Bool {
print("\(action.description) returns \(action == #selector(copy(_:)) || action == #selector(selectAll(_:)) || action == Selector(("_share:")) )" )
return action == #selector(copy(_:)) || action == #selector(selectAll(_:)) || action == Selector(("_share:"))
}
不幸的是,这不起作用。长按或双击时,会出现以下选项:
copy, select, select all, paste, share
打印输出
cut:返回false
copy:返回true
删除:返回false
_promptForReplace:返回false
_transliterateChinese:返回false
_insertDrawing:返回false
_showTextStyleOptions:返回false
_lookup:返回false
_define:返回false
_addShortcut:返回false
_accessibilitySpeak:返回false
_accessibilitySpeakLanguageSelection:返回false
_accessibilityPauseSpeaking:返回false
_share:返回true
makeTextWritingDirectionRightToLeft:返回false
makeTextWritingDirectionLeftToRight:返回false
我如何摆脱paste
和select
?
答案 0 :(得分:1)
如果您永远都不允许输入,听起来您确实应该使用UILabel
并仅添加您想要的动作来添加敲击/长按手势。
但是,如果您仍然想做...
要实现粘贴,您需要将UITextField
子类化并覆盖
UIPasteConfigurationSupporting的功能,例如
class UnpasteableTextField: UITextField {
override func canPaste(_ itemProviders: [NSItemProvider]) -> Bool {
return false
}
}
就选择而言,您可能必须覆盖UITextInput或UIResponderStandardEditActions中的内容。