2012-01-30 84 views
1

我有一个扩展的UITextField(添加了一个NSString属性,它的inputType)用于用户输入。当用户点击文本字段时,我使用一个选择器让用户选择输入。我还需要允许用户清除文本框,所以我想我可以使用UITextField clearButtonMode和UIPicker

tillageTextField.clearButtonMode = UITextFieldViewModeAlways; 

清除文本字段。

问题是当您点击X来清除文本框时,它也会触发我的选择器。我使用:

-(BOOL) textFieldShouldBeginEditing:(MyTextField *) textField 
{ 
    //other code 
    else if ([textField.inputType isEqualToString:@"tillageMethod"]) 
    { 
     self.customArray = [NSArray arrayWithObjects:@"No Till", @"Strip Till", @"Full Till", nil]; 
     self.tempTextField = textField; 
     [self showPicker]; 

     return NO; 
    } 
    //other code 
} 

,显示选择器。

有没有一种方法可以告诉我用户是否敲击了清除按钮而不显示拾取器?

回答

1

你也可以实现textFieldShouldClear:,并设置一个标志,在你的类(如doNotShowPickerOnNextCallback

- (BOOL)textFieldShouldClear:(UITextField *)textField { 

    if ([textField.inputType isEqualToString:@"tillageMethod"]) { 

     if (![self pickerIsShowing]) { 
      self.doNotShowPickerOnNextCallback = YES; 
     } 
    } 

    return YES; 
} 

- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField { 

    //other code 
    else if ([textField.inputType isEqualToString:@"tillageMethod"]) { 

     if (self.doNotShowPickerOnNextCallback) { 

      self.doNotShowPickerOnNextCallback = NO; 
      return NO; 
     } 

     self.customArray = [NSArray arrayWithObjects:@"No Till", @"Strip Till", @"Full Till", nil]; 
     self.tempTextField = textField; 
     [self showPicker]; 

     return NO; 
    } 
} 
+0

这将让我清除它瓦特/捡拾表现,但不会允许用户更改他的选择。 – Padin215 2012-01-30 18:06:53

+0

你能解释你为什么这么想吗?选取器将显示提供用户没有*只*清除了文本字段。 – 2012-01-30 20:01:51

+0

事实上,我已经做了一些小的修改,以避免选择器拒绝显示,如果文本字段清空,而选择器是可见的,但否则这应该工作正常。 – 2012-01-30 20:03:00