如何在ios7中的UITextfield中禁用复制/粘贴选项

时间:2014-06-09 07:07:06

标签: ios objective-c uitextfield

我试过

@implementation UITextField (DisableCopyPaste)

-(BOOL)canPerformAction:(SEL)action withSender:(id)sender
{

return NO;
return [super canPerformAction:action withSender:sender];
 }

@end

但是它会禁用所有文本字段的复制/粘贴选项,如何禁用特定文本字段的菜单选项。

4 个答案:

答案 0 :(得分:13)

我认为这种方法没问题,因为没有制作类别等。我的工作正常。

    [[NSOperationQueue mainQueue] addOperationWithBlock:^{
        [[UIMenuController sharedMenuController] setMenuVisible:NO animated:NO];
    }];
    return [super canPerformAction:action withSender:sender];

答案 1 :(得分:8)

您应该继承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)
  }
}

答案 2 :(得分:2)

为UITextField创建一个子类并覆盖该方法并在任何地方使用它。

@interface CustomTextField: UITextField
@end

@implemetation CustomTextField
-(BOOL)canPerformAction:(SEL)action withSender:(id)sender
{
    //Do your stuff
}
@end

答案 3 :(得分:0)

在您的实施中,您必须检查发件人是否是您应该禁用的确切文本字段:

@implementation UITextField (DisableCopyPaste)

- (BOOL)canPerformAction:(SEL)action withSender:(id)sender
{
    if ((UITextField *)sender == yourTextField)
        return NO;

    return [super canPerformAction:action withSender:self];
}

@end

但是制作一个覆盖方法的类别并不好。如果你创建一个像SpecialTextField那样继承UITextField的新类会更好,它会为canPerformAction提供方法return NO:withSender:并且只将这个类设置为应该有副本的文本字段/粘贴已禁用。