仅允许从UITextField选择和复制不起作用

时间:2019-03-22 17:55:26

标签: ios swift

我希望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

我如何摆脱pasteselect

1 个答案:

答案 0 :(得分:1)

如果您永远都不允许输入,听起来您确实应该使用UILabel并仅添加您想要的动作来添加敲击/长按手势。

但是,如果您仍然想做...

要实现粘贴,您需要将UITextField子类化并覆盖 UIPasteConfigurationSupporting的功能,例如

class UnpasteableTextField: UITextField {

    override func canPaste(_ itemProviders: [NSItemProvider]) -> Bool {
        return false
    }
}

就选择而言,您可能必须覆盖UITextInputUIResponderStandardEditActions中的内容。