如何在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];