Поведение клавиатуры при принудительном открытии с inputAccessoryView? - PullRequest
1 голос
/ 18 октября 2011

К моему iPad подключено устройство, которое работает как внешняя клавиатура, однако мне все еще нужна программная клавиатура в моей программе.Мне повезло, используя следующую статью: Показать программную клавиатуру iphone, хотя думал, что подключена аппаратная клавиатура , но iOS 5 сломала этот метод.Нижняя часть программной клавиатуры слегка обрезана в большинстве представлений, но в других окнах внутри окна отображается только половина клавиатуры, а не там, где вы этого ожидаете.

Весь следующий код работает в моем AppDelegate.mфайл в iOS4, но не в iOS5.

forceKeyboard вызывается после отправки UITextFieldTextDidBeginEditingNotification.

-(void) textFieldBegan: (NSNotification *) theNotification
{
    UITextField *theTextField = [theNotification object];
    theTextField.inputAccessoryView = inputAccessoryView;
    [self performSelector:@selector(forceKeyboard) withObject:nil afterDelay:0];
}


//Change the inputAccessoryView frame
-(void) forceKeyboard
{
    inputAccessoryView.superview.frame = CGRectMake(0, 502, 1024, 265);

    int movementDistance = 1;
    float movementDuration = 0.3f;

    [UIView beginAnimations: @"kb_anim_open" context: nil];
    [UIView setAnimationBeginsFromCurrentState: YES];
    [UIView setAnimationDuration: movementDuration];
    inputAccessoryView.superview.frame = CGRectOffset(inputAccessoryView.superview.frame, 0, movementDistance);
    [UIView commitAnimations];
}

Закрыть Клавиатура вызывается после отправки UITextFieldTextDidEndEditingNotification.

* 1011Будем весьма благодарны за любые идеи о том, как я могу приручить мягкую клавиатуру;Я пытался бороться со значениями superview.frame некоторое время, но безуспешно.

Спасибо за чтение.


ОБНОВЛЕНИЕ

Я разобрался с настройкой, которая открывает и закрывает клавиатуру в iOS 4 и 5, но не анимирует.Опять же, это все в AppDelegate, где «textFieldBegan» и «textFieldEnd» вызываются уведомлениями, отправляемыми, когда пользователь начинает и заканчивает редактирование соответственно.

-(void) textFieldBegan: (NSNotification *) theNotification
{
    UITextField *theTextField = [theNotification object];

     if (!inputAccessoryView) {
         inputAccessoryView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 1024, 1)];
     }else{
         inputAccessoryView.frame = CGRectMake(0, 0, 1024, 1);
     }

     theTextField.inputAccessoryView = inputAccessoryView;

     [self performSelector:@selector(forceKeyboard) withObject:nil afterDelay:0];
}

-(void) textFieldEnd: (NSNotification *) theNotification
{
    NSString *classstr = NSStringFromClass([[theNotification object] class]);

    UITextView *theTextView = [theNotification object];
    [self performSelector:@selector(forceCloseKeyboard) withObject:nil afterDelay:0];
    [theTextView resignFirstResponder];
}


//Change the inputAccessoryView frame
-(void) forceKeyboard
{
    //default center = 512, 591
    inputAccessoryView.superview.frame = CGRectMake(0, 415, 1024, 353);
    [UIView animateWithDuration:0.3 animations: ^ { [inputAccessoryView.superview transform]; }];
}
-(void) forceCloseKeyboard  //Unnecessary?
{
    inputAccessoryView.frame = CGRectMake(0, 0, 1024, 0);
    [UIView animateWithDuration:0.3 animations: ^ { [inputAccessoryView transform]; }];
}

Выглядит так, как будто метод «forceCloseKeyboard» не являетсяна самом деле ничего не делает так, как это выглядит, когда textField уходит в отставку и все равно закрывает клавиатуру.Я оставляю это здесь на случай, если кто-то может придумать способ оживить открытие и закрытие клавиатуры.

...