UIPickerView作为inputView,但不允许直接编辑

时间:2013-07-17 07:22:29

标签: ios uikit uitextfield uipickerview uitextfielddelegate

所以我将UIPickerView作为我的一个文本字段的inputView。 它工作得很好:它像普通键盘一样向上滑动,我可以选择一个选项,它将填充在文本字段中。

唯一的问题是我可以通过输入来直接编辑该字段。 如何禁止这种行为?这样甚至光标都不显示?

我试过了:

- (BOOL)textFieldShouldBeginEditing:(UITextField*)textField
{
    [self.datePick setHidden:NO];
    return NO;
}

但在这种情况下,选择器会完全停止工作 - 它不会出现。

感谢您的帮助!

4 个答案:

答案 0 :(得分:4)

我最终做了以下事情:

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range     replacementString:(NSString *)string
{
    if([textField isEqual:self.birthdayF] || [textField isEqual:self.genderF])
        return NO;
    return YES;
}

因此光标仍在那里,但用户无法输入任何内容。

答案 1 :(得分:0)

您可以设置textField.enabled = NO;并在UITapGestureRecognizer上放置textField并听取点击以显示您的选择器。

 - (void) viewDidLoad
  {
    UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTap:)];
    [textField addGestureRecognizer:tap];
    [tap release];
  }


- (void) handleTap:(UITapGestureRecognizer *)tap
  {
 //do stuff
 //if you need the textField here 
   UITextField *text = (UITextField *)tap.view; 
  }

答案 2 :(得分:0)

试试这个,

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

    if([textField isEqual:selectedTextField])
         return NO;

    return YES;
}

答案 3 :(得分:-1)

说你的文字域名是pickerTextField 现在在ViewDidLoad中添加以下行

self.pickerTextField.delegate = self; (不要忘记遵守UITextFieldDelegate协议)

实施以下方法

- (BOOL)textFieldShouldBeginEditing:(UITextField*)textField
{
    if([textField isEqual:pickerTextField])
    {
    [self.datePick setHidden:NO];
    return NO;
    }
    return YES;
}