2

我的代码工作得非常好,通过使用对象的 来显示对象UITextField(在 a 中UITableViewCell)的选择器。这会停止显示键盘,但不会阻止某人直接在该字段中输入。inputViewUITextField

公平地说,他们只能粘贴一些内容,但即使您不希望在该字段中使用自定义值,也不允许这样做。

是否有关闭文本输入的方法?我试过了:

return NO;

textFieldShouldBeginEditing()委托方法中,但这仅用于防止字段操作 - 所以没有选择器出现。

有没有其他方法可以防止这种行为?

提前致谢。

4

3 回答 3

3

您可以使用该UITextFieldDelegate方法

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

任何时候尝试更改文本字段中的文本时都会调用此方法。您可以简单地检查该string值是否是您期望的值(来自您的选择器视图),否则丢弃它。如果string值是你想要的,返回YES,否则返回NO

于 2011-11-15T17:24:16.800 回答
1

使用另一个屏幕外的 UITextfield 怎么样?uipicker 然后是屏幕外文本字段的输入视图。在日期选择器更改时的处理程序中,指定要更新原始文本字段的文本属性。点击原始文本字段以调出选择器是以下几种方式之一: 1. 文本字段始终设置为 userInteractionEnabled = NO,并且上面有一个不可见的按钮来检测触摸。2. 单元格中的文本字段被标签替换,并通过 didSelectRowAtIndexPath 被单元格检测到。
3. 单元格中的文本字段,在检测到触摸后,委托将 didBeginEditing 中的文本字段设置为 userInteractionEnabled = NO(不确定这是否可行)。

想想看,您甚至可以在不创建第二个文本字段的情况下尝试 #3。

于 2011-11-20T22:44:18.490 回答
0

您要求做的是禁用子菜单。

要做这个子类 UITextField 并实现下面的方法

(BOOL)canPerformAction:(SEL)action withSender:(id)sender
{
    return NO;
}

这将阻止菜单显示。

于 2012-02-05T06:08:09.340 回答