【问题标题】:UIPickerView as inputView, but disallow direct editingUIPickerView 作为 inputView,但不允许直接编辑
【发布时间】:2013-07-17 07:22:29
【问题描述】:
所以我将 UIPickerView 作为我的一个文本字段的 inputView。
它完美地工作:它像普通键盘一样向上滑动,我可以选择一个选项,它将被填充到一个文本字段中。
唯一的问题是我可以通过输入直接编辑该字段。
如何禁止这种行为?所以连光标都没有出现?
我试过了:
- (BOOL)textFieldShouldBeginEditing:(UITextField*)textField
{
[self.datePick setHidden:NO];
return NO;
}
但在这种情况下,选择器完全停止工作 - 它不会出现。
感谢您的帮助!
【问题讨论】:
标签:
ios
uikit
uitextfield
uipickerview
uitextfielddelegate
【解决方案1】:
我最终做了以下事情:
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
if([textField isEqual:self.birthdayF] || [textField isEqual:self.genderF])
return NO;
return YES;
}
所以光标还在,但用户无法输入任何内容。
【解决方案2】:
您可以设置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;
}
【解决方案3】:
这样试试,
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
if([textField isEqual:selectedTextField])
return NO;
return YES;
}
【解决方案4】:
说你的文本字段名称是pickerTextField
现在在 ViewDidLoad 添加以下行
self.pickerTextField.delegate = self; (别忘了遵守UITextFieldDelegate 协议)
比实现以下方法
- (BOOL)textFieldShouldBeginEditing:(UITextField*)textField
{
if([textField isEqual:pickerTextField])
{
[self.datePick setHidden:NO];
return NO;
}
return YES;
}