限制特定UITextfield的复制,粘贴选项

时间:2010-11-25 16:30:24

标签: iphone objective-c uitextfield copy-paste

我的UIView包含两个UITextField。我需要限制一个textfield的复制,粘贴选项。我不想将其限制为另一个。

当我使用以下代码时,该字段都受限于复制,粘贴。

-(BOOL)canPerformAction:(SEL)action withSender:(id)sender 
{
    if ( [UIMenuController sharedMenuController] )
    {
            [UIMenuController sharedMenuController].menuVisible = NO;
    }
     return NO;
}

任何人都可以为我提供解决问题的方法。

4 个答案:

答案 0 :(得分:19)

创建UITextField的子类。在该子类中,实现

- (BOOL)canPerformAction:(SEL)action withSender:(id)sender {
    if (sel_isEqual(action, @selector(copy:))) {
        return NO;
    }
    return [super canPerformAction:action withSender:sender];
}

然后将此子类用于您不希望复制的字段,并使用常规UITextField作为您可以复制的字段。

答案 1 :(得分:4)

以下内容可以防止粘贴超过1个字符的任何字符串。然而,1个字符长的字符串将通过(对某些人有用 - 不需要子类化)。

首先给textField一个委托

myTextField.delegate = self; // OR [myTextField setDelegate:self];

然后将以下方法添加到ViewController

-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{

    if ( [string length] > 1) {
        return NO;
    }
    return YES;
}

答案 2 :(得分:2)

Apple的解释:

  

此默认实现   如果响应者,方法返回YES   class实现请求的操作   并调用下一个响应者   才不是。子类可以覆盖它   启用菜单命令的方法   在当前状态;例如,你   如果有,将启用复制命令   选择或禁用粘贴   命令,如果粘贴板没有   包含正确的数据   粘贴板表示类型。

因此,解决方案是将UITextView子类化并正确返回。

More information about the method here

答案 3 :(得分:1)

我有一个随意的想法,在文本视图上完美运行。没有理由不在文本字段上工作。

我将以下内容添加到我想限制的文本字段中。

  • 长按手势识别器(1次触摸)
  • Long Press Gesture Recognizer(2次触摸)
  • 点击手势识别器(2个水龙头,1个触摸)
  • 点击手势识别器(3次点击,1次点击)
  • 点击手势识别器(1次点击,2次触摸)

然后为其分配了以下代码。

- (IBAction)cancelTouch:(id)sender {
    //do nothing
}

我现在仍然可以滚动浏览文本视图,但是长按或双击现在什么都不做!