在我的iPad应用程序中,我使用表单样式呈现控制器
controller.modalPresentationStyle=UIModalPresentationFormSheet;
在横向模式下,当设备的键盘打开时,设置tableView的大小,以便用户可以查看表的所有记录。
获取显示/隐藏键盘的事件。我已设置NSNotification
问题
但是当用户使用外部/虚拟键盘点击表格单元格的textField时,我没有得到键盘显示/隐藏的事件。 因此,当textfield成为第一响应者时,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];
}
在AutoRotate和文本字段成为第一响应者时设置框架
-(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;
}
感谢。
答案 0 :(得分:1)
在文本字段开始编辑时更改表格的框架不是一个好主意。在iPad上,用户可以使用外接键盘,固定键盘或分离式键盘。
如果用户有外接键盘,则无需调整窗口大小。使用外接键盘时不会出现屏幕键盘,因此没有理由调整窗口大小。
如果用户使用的是拆分键盘,则无需担心调整窗口大小。如果他们拆分键盘,他们可以将键盘放在用户界面的中间,这样就不可能(或者至少不切实际)重新安排你的UI,因此它至少不会被分离键盘的一小部分覆盖。如果用户拆分键盘并覆盖重要的UI组件,他们需要将键盘移开。
调整UI大小的最佳方法是在键盘中使用ChangeFrame / Hide方法
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillChangeFrame:) name:UIKeyboardWillChangeFrameNotification object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillHide:) name:UIKeyboardWillHideNotification object:nil];
在这些事件的处理程序中,您可以获得键盘高度,并相应地调整UI
-(void)keyboardWillChangeFrame:(NSNotification*)notification
{
NSDictionary* info = [notification userInfo];
NSValue* kbFrame = info[UIKeyboardFrameEndUserInfoKey];
NSTimeInterval animationDuration = [info[UIKeyboardAnimationDurationUserInfoKey] doubleValue];
CGRect keyboardFrame = [kbFrame CGRectValue];
BOOL isPortrait = UIDeviceOrientationIsPortrait([UIApplication sharedApplication].statusBarOrientation);
CGFloat height = isPortrait ? keyboardFrame.size.height : keyboardFrame.size.width;
}
这将获得animationDuration和键盘的高度,以便您可以使用UIView animateWithDuration块为框架视图的帧更改设置动画,以便键盘不会遮挡它。
在KeyboardWillHide中的:您只需要从NSNotification获取animationDuration(与上面相同)(高度显然为0)。然后使用另一个UIView animateWithDuration块为您的tableview设置动画,将其大小调整为原始大小