【问题标题】: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;
          }
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2014-01-11
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多