1

私は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];
}

The view did load で、デリゲートを設定しました。

- (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];
}
4

3 に答える 3

2

[self.view endEditing:YES]使用する代わりに

    [textField performSelector:@selector(resignFirstResponder)
                    withObject:nil
                    afterDelay:0];
于 2012-12-20T10:29:31.847 に答える
0

PickerViewとして4番目のテキストフィールドにinputViewを設定するとうまくいくと思います。

textfield.inputView = pickerView;
于 2012-12-20T10:36:59.683 に答える
0
- (void)textFieldDidBeginEditing:(UITextField *)textField
{

  if(textField==fourthtextfield)
  {
     return NO;
  }
}
于 2012-12-20T10:21:56.367 に答える