我的UIView包含两个UITextField。我需要限制一个textfield的复制,粘贴选项。我不想将其限制为另一个。
当我使用以下代码时,该字段都受限于复制,粘贴。
-(BOOL)canPerformAction:(SEL)action withSender:(id)sender
{
if ( [UIMenuController sharedMenuController] )
{
[UIMenuController sharedMenuController].menuVisible = NO;
}
return NO;
}
任何人都可以为我提供解决问题的方法。
答案 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子类化并正确返回。
答案 3 :(得分:1)
我有一个随意的想法,在文本视图上完美运行。没有理由不在文本字段上工作。
我将以下内容添加到我想限制的文本字段中。
然后为其分配了以下代码。
- (IBAction)cancelTouch:(id)sender {
//do nothing
}
我现在仍然可以滚动浏览文本视图,但是长按或双击现在什么都不做!