Как я могу заставить клавиатуру исчезнуть? - PullRequest
1 голос
/ 25 августа 2009

Есть ли способ заставить клавиатуру исчезнуть без resignFirstResponder? У меня есть UITextField, и я бы хотел, чтобы он мог принимать новый текст и при этом иметь точку ввода (мигающий курсор) видимой без отображения клавиатуры на экране.

Когда я выполняю [textField resignFirstResponder], я все еще могу вставить текст, добавив к textField.text, но больше не вижу точки вставки.

Есть ли стандартный способ оживить клавиатуру, при этом мой textField остается первым респондентом?

Спасибо.

Ответы [ 2 ]

4 голосов
/ 28 августа 2009

Нашел ответ на этот вопрос. Это не стандартно, и, как говорит Дейв, может быть табу для рецензентов приложений. Используя код с этой страницы в качестве отправной точки:

http://unsolicitedfeedback.com/2009/02/06/how-to-customize-uikeyboard-by-adding-subviews/

Я добавил в блок анимации. Вы можете отклонить представление клавиатуры с помощью стандартной анимации, но независимо от того, кто первым ответит, этот статус сохранится. Действительно, клавиатура просто скрыта за экраном.

- (void)hideKeyboard 
{
  for (UIWindow *keyboardWindow in [[UIApplication sharedApplication] windows]) {

    // Now iterating over each subview of the available windows
    for (UIView *keyboard in [keyboardWindow subviews]) {

      // Check to see if the view we have referenced is UIKeyboard.
      // If so then we found the keyboard view that we were looking for.
      if([[keyboard description] hasPrefix:@"<UIKeyboard"] == YES) {

        // animate the keyboard moving
        CGContextRef context = UIGraphicsGetCurrentContext();
        [UIView beginAnimations:nil context:context];
        [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
        [UIView setAnimationDuration:0.4];

        // remove the keyboard
        CGRect frame = keyboard.frame;
        // if (keyboard.frame.origin.x >= 0) {
        if (keyboard.frame.origin.y < 480) {
          // slide the keyboard onscreen
          //frame.origin.x = (keyboard.frame.origin.x - 320);

          // slide the keyboard onscreen
          frame.origin.y = (keyboard.frame.origin.y + 264);
          keyboard.frame = frame;
        }
        else {
          // slide the keyboard off to the side
          //frame.origin.x = (keyboard.frame.origin.x + 320);

          // slide the keyboard off
          frame.origin.y = (keyboard.frame.origin.y - 264);
          keyboard.frame = frame;
        }

        [UIView commitAnimations];
      }
    }
  }
}

Я написал в коде, чтобы отклонить клавиатуру слева и снизу экрана. Я не знаю, что произойдет, когда вы в конечном итоге resignFirstResponder, но это может быть идея сбросить кадр клавиатуры, когда вы это сделаете.

2 голосов
/ 25 августа 2009

Если есть, то это не документировано в iPhone API. Кроме того, то, что вы просите, не имеет смысла. Вы хотите иметь точку вставки в UITextField. Ок, отлично. Но вы также хотите, чтобы клавиатура ушла? Тогда в чем смысл текстового поля, имеющего фокус? Как вы собираетесь вводить данные в текстовое поле? Если вы хотите иметь собственную клавиатуру, просто отобразите ее поверх клавиатуры. Я не могу придумать вескую причину, почему вы хотите, чтобы курсор был видимым, но , а не имеет какой-то механизм ввода данных. Это нарушит соглашение о пользовательском интерфейсе и может даже отклонить ваше приложение.

...