使用inputView在iPhone上显示UIPicker时,防止直接键入UITextField

时间:2011-11-15 16:46:19

标签: iphone uitextfield uipicker inputview

通过使用UITextField对象的UITableViewCell,我的代码可以很好地显示inputView对象(UITextField)中的选择器。这会停止显示键盘,但不会阻止某人直接键入字段。

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

无论如何关闭文本输入?我试过了:

return NO;

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

还有其他方法可以阻止这种行为吗?

提前致谢。

3 个答案:

答案 0 :(得分:3)

您可以使用UITextFieldDelegate方法

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

只要某些内容尝试更改文本字段中的文本,就会调用此方法。您可以进行简单的检查,string值是您期望的值(来自您的选择器视图),否则丢弃它。如果string值符合您的要求,请返回YES,否则返回NO

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

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

要执行此子类UITextField并实现以下方法

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

这将阻止菜单显示。