如何在ios7的UITextfield中禁用复制/粘贴选项
我试过了
@implementation UITextField (DisableCopyPaste) -(BOOL)canPerformAction:(SEL)action withSender:(id)sender { return NO; return [super canPerformAction:action withSender:sender]; } @end
但是它会禁用所有文本框的复制/粘贴选项,如何禁用特定文本框的菜单选项。
我觉得这个方法没问题,因为没有制作类别等。对我来说工作得很好。
[[NSOperationQueue mainQueue] addOperationWithBlock:^{ [[UIMenuController sharedMenuController] setMenuVisible:NO animated:NO]; }]; return [super canPerformAction:action withSender:sender];
您应该canPerformAction:withSender
UITextView
并重写canPerformAction:withSender
。 不应提供复制/粘贴的文本字段应与您的子类一起定义。
NonCopyPasteField.h:
@interface NonCopyPasteField : UITextField @end
NonCopyPasteField.m:
@implemetation (BOOL)canPerformAction:(SEL)action withSender:(id)sender { if (action == @selector(copy:) || action == @selector(paste:)) { return NO; } [super canPerformAction:action withSender:sender]; } @end
更新。 Swift版本:
class NonCopyPasteField: UITextField { override func canPerformAction(_ action: Selector, withSender sender: Any?) -> Bool { if (action == #selector(copy(_:)) || action == #selector(paste(_:))) { return false } return super.canPerformAction(action, withSender: sender) } }
为UITextField创build一个子类并覆盖该方法,并在需要的地方使用它。
@interface CustomTextField: UITextField @end @implemetation CustomTextField -(BOOL)canPerformAction:(SEL)action withSender:(id)sender { //Do your stuff } @end
在您的实施中,您必须检查发件人是否应该禁用的确切文本字段:
@implementation UITextField (DisableCopyPaste) - (BOOL)canPerformAction:(SEL)action withSender:(id)sender { if ((UITextField *)sender == yourTextField) return NO; return [super canPerformAction:action withSender:self]; } @end
但是制定一个覆盖某个方法的类别并不好。 如果你创build一个像SpecialTextField
这样的inheritanceUITextField
的新类,那么这个方法总是return NO
:withSender:并且只将这个类设置为应该禁止复制/粘贴的文本字段。