如何在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:并且只将这个类设置为应该禁止复制/粘贴的文本字段。