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

如何在ios7的UITextfield中禁用复制/粘贴选项,ios,objective-c,uitextfield,Ios,Objective C,Uitextfield,我试过了 @implementation UITextField (DisableCopyPaste) -(BOOL)canPerformAction:(SEL)action withSender:(id)sender { return NO; return [super canPerformAction:action withSender:sender]; } @end 但它禁用了所有textfield的复制/粘贴选项,以及如何禁用特定textfield的菜单选项。为UITextFi

我试过了

@implementation UITextField (DisableCopyPaste)

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

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

@end

但它禁用了所有textfield的复制/粘贴选项,以及如何禁用特定textfield的菜单选项。

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

@interface CustomTextField: UITextField
@end

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

您应该子类化
UITextView
并重写
canPerformAction:withSender
。 不应提供复制/粘贴的文本字段应与子类一起定义

NonCopyPasteField.h:

NonCopyPasteField.m:

更新。 Swift版本:


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

@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:withSender:返回NO,并将该类设置为仅应禁用复制/粘贴的textfields。

我认为该方法可以,由于没有类别等,它的作品对我来说很好

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

是否对UITextField使用类别?如果是,则表示如果在视图控制器中添加该类别,则在该视图控制器中创建的所有文本字段都没有复制粘贴选项。是的,我理解,但是其他视图控制器中的文本字段也没有该选项。是否要禁用同一视图控制器中特定文本字段的复制粘贴选项?如果在VC中导入该文本字段类别,则VC中创建的所有文本字段都没有复制粘贴选项。在类别推荐这样的东西是另一种罪过。我不是推荐,你会注意到是你读了整个答案。答案的第一部分是指出如何检查应禁用复制/粘贴的确切文本字段,如@SMS所问!即使你不推荐,为什么你认为其他人会使用它?我想,这个可怕的建议应该得到否决票。如果你读了原始问题,你会注意到这是@SMS启动它的方式,所以我只想告诉他如何检查确切的文本字段。我不明白你为什么花这么多精力来否决我,而不是回答这个更有价值的问题。@JayprakashDubey我已经用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)
  }
}
@implementation UITextField (DisableCopyPaste)

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

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

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