禁用复制,UITextfield中的粘贴在iOS 9.x中不起作用

我在一个类BBCustomUtility.h,.m类文件中创建了一个文本字段然后

+(UITextField*)createTextField: (CGRect)rect image:(NSString*)imageName tag:(int)tag secureText:(BOOL)entry placeh:(NSString*)placeholder { UITextField *transactionField = [ [ UITextField alloc ] initWithFrame: rect ]; transactionField.background = [UIImage imageNamed:imageName]; transactionField.adjustsFontSizeToFitWidth = YES; transactionField.textColor = [UIColor blackColor]; transactionField.font = [UIFont systemFontOfSize:17.0]; transactionField.placeholder = placeholder; transactionField.backgroundColor = [UIColor clearColor]; transactionField.borderStyle = UITextBorderStyleNone; transactionField.autocorrectionType = UITextAutocorrectionTypeNo; transactionField.autocapitalizationType = UITextAutocapitalizationTypeNone; transactionField.textAlignment = UITextAlignmentCenter; transactionField.contentVerticalAlignment = UIControlContentVerticalAlignmentCenter; transactionField.keyboardType = UIKeyboardTypeDefault; transactionField.returnKeyType = UIReturnKeyDone; transactionField.tag = tag; transactionField.delegate = self; transactionField.clearButtonMode = UITextFieldViewModeWhileEditing; transactionField.text = @""; [ transactionField setEnabled: YES ]; transactionField.secureTextEntry = entry; return transactionField ; } 

从公共类导入并在class1.m中使用

 mPasswordField1 = [BBCustomUtility createTextField:CGRectMake(IS_WIDTH_DEVICE/2-120, 140, 50, 50) image:@"txtField_bg_50.png" tag:1 secureText:YES placeh:[shareObj.mLabelDictionary valueForKey:@""]]; mPasswordField1.keyboardType = UIKeyboardTypeNumberPad; mPasswordField1.clearButtonMode = UITextFieldViewModeNever; mPasswordField1.delegate = self; [self.view addSubview:mPasswordField1]; 

尝试在以下方法中禁用文本字段上的复制粘贴选项,这些对我来说不起作用

 1) -(BOOL)canPerformAction:(SEL)action withSender:(id)sender { // Returning 'NO' here disables all actions on textfield return NO; } // not working still showing the paste option on textfield 

2)

  -(BOOL)canPerformAction:(SEL)action withSender:(id)sender { if (action == @selector(copy:) || action == @selector(paste:)) { return NO; } return [super canPerformAction:action withSender:sender]; } // this is also not working still showing the paste option 

3)

  -(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string { if ([mPasswordField1 respondsToSelector:@selector(inputAssistantItem)]) { UITextInputAssistantItem *inputAssistantItem = [mPasswordField1 inputAssistantItem]; inputAssistantItem.leadingBarButtonGroups = @[]; inputAssistantItem.trailingBarButtonGroups = @[]; } } // this also not working 

任何人都可以告诉我在我的代码中犯了什么错误。

在您的代码中添加以下方法,就是这样,

  - (BOOL)canPerformAction:(SEL)action withSender:(id)sender { [[NSOperationQueue mainQueue] addOperationWithBlock:^{ [[UIMenuController sharedMenuController] setMenuVisible:NO animated:NO]; }]; return [super canPerformAction:action withSender:sender]; } 

它将禁用所有类型的编辑。

希望这会有所帮助:)

-canPerformAction:withSender:应该在UITextField的子类中。 它看起来不像你的子类,因为你正在分配一个UITextField。

在此处输入图像描述

  //This code has side effects in the UISearchbar (white field is no more disappearing): - (BOOL)canPerformAction:(SEL)action withSender:(id)sender { [[NSOperationQueue mainQueue] addOperationWithBlock:^{ [[UIMenuController sharedMenuController] setMenuVisible:NO animated:NO]; }]; return [super canPerformAction:action withSender:sender]; } 

如果您只想将其应用于一个特殊的文本字段,如密码:

 - (BOOL)canPerformAction:(SEL)action withSender:(id)sender { if([self.textFieldPassword isFirstResponder]){ [[NSOperationQueue mainQueue] addOperationWithBlock:^{ [[UIMenuController sharedMenuController] setMenuVisible:NO animated:NO]; }]; } return [super canPerformAction:action withSender:sender]; } 

另一种选择是直接避免选择实现UITextFieldDelegate的Textfield并在其方法中进行此操作:

 - (BOOL)textFieldShouldBeginEditing:(UITextField *)textField { textField.userInteractionEnabled = NO; return YES; } - (void)textFieldDidEndEditing:(UITextField *)textField { textField.userInteractionEnabled = YES; } 

希望能帮助到你。