【问题标题】:Hide keyboard when editing another textfield编辑另一个文本字段时隐藏键盘
【发布时间】:2012-12-07 20:04:13
【问题描述】:

我有 4 个文本字段,在编辑其中的 3 个时,我想要可以正常工作的标准键盘,但在第 4 个文本字段上,我想显示一个选择轮。

直接按第 4 个文本字段时,我的代码工作正常,但如果我编辑文本字段 1-3,然后按数字 4,键盘不会删除。

任何想法为什么?以及如何解决?

- (void)textFieldDidBeginEditing:(UITextField *)textField
{
   if ([textField.text isEqualToString:selectedCountryText])
   {
     NSLog(@"Edit country");
     [self.view endEditing:YES];

     [UIView beginAnimations: @"anim" context: nil];
     [UIView setAnimationBeginsFromCurrentState: YES];
     [UIView setAnimationDuration: 0.3f];
     if (pickerVisible)
     {
        picker.frame = CGRectOffset(picker.frame, 0, -341);
        pickerVisible = FALSE;
     }
     else
     {
        picker.frame = CGRectOffset(picker.frame, 0, 341);
        pickerVisible = TRUE;
     }
     [UIView commitAnimations];
     [self removeKeyboard];
  }
  else
  {
    if (pickerVisible)
    {
        //Remove picker
        [UIView beginAnimations: @"anim" context: nil];
        [UIView setAnimationBeginsFromCurrentState: YES];
        [UIView setAnimationDuration: 0.3f];
        picker.frame = CGRectOffset(picker.frame, 0, -341);
        [UIView commitAnimations];
        pickerVisible = FALSE;
    }
  }       
}

- (void)textFieldDidEndEditing:(UITextField *)textField
{
  if ([textField.text isEqualToString:selectedCountryText])
  {
    //do nothing for now
  }
  else
  {
    [self.view endEditing:YES];
    [self removeKeyboard];
  }
}

- (void) removeKeyboard
{
    [self.firstname resignFirstResponder];
    [self.lastname resignFirstResponder];
    [self.year resignFirstResponder];
    [self.country resignFirstResponder];
}

在视图中确实加载了我设置了委托。

- (void)viewDidLoad
{
  NSLog(@"viewdidload SearchSwimmerView");
  // Setup the text fields..
  [self.firstname setDelegate:self];
  [self.firstname setReturnKeyType:UIReturnKeyDone];
  [self.firstname addTarget:self action:@selector(removeKeyboard) forControlEvents:UIControlEventEditingDidEndOnExit];

  [self.lastname setDelegate:self];
  [self.lastname setReturnKeyType:UIReturnKeyDone];
  [self.lastname addTarget:self action:@selector(removeKeyboard) forControlEvents:UIControlEventEditingDidEndOnExit];

  [self.year setDelegate:self];
  [self.year setReturnKeyType:UIReturnKeyDone];
  [self.year addTarget:self action:@selector(removeKeyboard) forControlEvents:UIControlEventEditingDidEndOnExit];

  [self.country setDelegate:self];
}

【问题讨论】:

  • 如果您希望用户使用选择器进行输入,那么为什么不使用按钮而不是文本字段并根据选择器值更改其标题?

标签: ios uitextfield uipickerview uikeyboard uitextfielddelegate


【解决方案1】:

而不是使用[self.view endEditing:YES] 使用

    [textField performSelector:@selector(resignFirstResponder)
                    withObject:nil
                    afterDelay:0];

【讨论】:

  • 不要调用 [self removeKeyboard]
【解决方案2】:

我认为将第四个文本字段的 inputView 设置为 PickerView 可能会解决问题。

textfield.inputView = pickerView;

【讨论】:

    【解决方案3】:
    - (void)textFieldDidBeginEditing:(UITextField *)textField
    {
    
      if(textField==fourthtextfield)
      {
         return NO;
      }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-06-08
      • 2014-03-19
      • 2015-07-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多