首页 > 解决方案 > 如何在 Swift 5 中限制 iOS App 的文本文件中的复制粘贴?

问题描述

在我的应用程序中,我试图限制从文本文件中复制和粘贴。在 Swift5 中有没有默认/更好的方法来做到这一点?

尝试使用以下代码但无法正常工作

var key: Void?

class UITextFieldAdditions: NSObject {
    var readonly: Bool = false
}

extension UITextField {
    var readonly: Bool {
        get {
           return self.getAdditions().readonly
     } set {
        self.getAdditions().readonly = newValue
    }
}

private func getAdditions() -> UITextFieldAdditions {
    var additions = objc_getAssociatedObject(self, &key) as? UITextFieldAdditions
    if additions == nil {
        additions = UITextFieldAdditions()
        objc_setAssociatedObject(self, &key, additions!, objc_AssociationPolicy.OBJC_ASSOCIATION_RETAIN)
    }
    return additions!
}

open override func target(forAction action: Selector, withSender sender: Any?) -> Any? {
    if ((action == #selector(UIResponderStandardEditActions.paste(_:)) || (action == #selector(UIResponderStandardEditActions.cut(_:)))) && self.readonly) {
        return nil
    }
    return super.target(forAction: action, withSender: sender)
}

}

标签: iosswift

解决方案


您可以编写一个扩展来UITextField隐藏复制粘贴操作:

extension UITextField {
    override open func canPerformAction(_ action: Selector, withSender sender: Any?) -> Bool {
        return (action == #selector(UIResponderStandardEditActions.copy(_:))
            || action == #selector(UIResponderStandardEditActions.paste(_:))) ?
            false : super.canPerformAction(action, withSender: sender)
    }
}

前: 在此处输入图像描述

后: 在此处输入图像描述


推荐阅读