2010-11-25 76 views
7

我的UIView包含两个UITextField.I需要为一个textfield限制复制,粘贴选项。我不想限制为另一个。限制特定UITextfield的复制,粘贴选项

当我使用下面的代码时,这两个字段都受到复制,粘贴限制。

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

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

+0

你有没有尝试过将`userInteractionEnabled`设置为`NO`?还是应该UITextView仍然是可编辑的? – 2011-01-10 14:04:04

+0

@afEken我认为它应该是可编辑的 – KingofBliss 2011-01-11 06:36:35

回答

19

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

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

然后使用这个子类,你不希望能够复制在该领域,并使用常规的UITextField的一个,你可以从复制。从苹果

+0

很好......但我不想为受限制的UITextfield显示任何菜单(剪切,复制,粘贴,选择等)。 – 2011-01-10 02:17:50

2

Explanantion:

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

所以,解决方案是继承UITextView并正确返回。

More information about the method here

4

下防止任意字符串长于待粘贴1个字符。然而,长度为1个字符的字符串将会通过(可能对某些人有用 - 不需要子类化)。

首先给你的文本字段的委托

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; 
}
1

我有非常完美的文本视图的随机的想法。没有理由为什么它不适用于文本字段。

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

  • 长按姿势识别(1点触摸)
  • 长按姿势识别(2点触摸)
  • 敲击手势识别器(2个抽头,1点触摸)
  • 敲击手势识别器(3个抽头,1点触摸)
  • 敲击手势识别器(1个抽头,2点触摸)

然后分配下面的代码给它。

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

我现在仍然可以通过textview滚动,但长按或双击现在完全没有!