В моем приложении для iPad я представляю контроллер, использующий стиль листа формы как
controller.modalPresentationStyle=UIModalPresentationFormSheet;
В ландшафтном режиме, когда клавиатура устройства открыта, я устанавливаю размер tableView, чтобы пользователь мог видеть все записи таблицы.
Получить событие отображения / скрытия клавиатуры. Я установил NSNotification
Проблема
Но когда пользователь нажимает на текстовое поле ячейки таблицы с помощью внешней / виртуальной клавиатуры, я не получаю событие отображения / скрытия клавиатуры. Поэтому, когда текстовое поле становится первым респондентом, размер Tableview уменьшается, но в этом нет необходимости, пока пользователь подключен к внешней клавиатуре.
Может ли кто-нибудь направить / помочь здесь, что я могу сделать? Чтобы я мог перестать устанавливать размер при использовании внешней клавиатуры.
Зарегистрировать событие клавиатуры
- (void)registerForKeyboardNotifications{
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(keyboardWasShown:)
name:UIKeyboardDidShowNotification object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(keyboardWasHidden:)
name:UIKeyboardDidHideNotification object:nil];
}
Установить фрейм при автоповороте и текстовое поле станет первым респондентом
-(void)setFramesOfTable
{
CGRect rct=tableView.frame;
if(appDel.isThisIPad && ([[UIApplication sharedApplication] statusBarOrientation]==UIInterfaceOrientationLandscapeLeft || [[UIApplication sharedApplication] statusBarOrientation]==UIInterfaceOrientationLandscapeRight) && [selectedField isFirstResponder])
{
rct.size.height=400.0;
}
else
{
rct.size.height=576.0;
}
tableView.frame=rct;
}
- (void)textFieldDidBeginEditing:(UITextField *)textField{
selectedField = textField;
[self setFramesOfTable];
}
-(NSUInteger)supportedInterfaceOrientations
{
[self setFramesOfTable];
return UIInterfaceOrientationMaskAll;
}
Спасибо.