К моему 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 уходит в отставку и все равно закрывает клавиатуру.Я оставляю это здесь на случай, если кто-то может придумать способ оживить открытие и закрытие клавиатуры.