0

在我的 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;
}

谢谢。

4

1 回答 1

1

在文本字段开始编辑时更改表格的框架不是一个好主意。在 iPad 上,用户可以使用外接键盘、对接键盘或分体键盘。

如果用户有外接键盘,则无需调整窗口大小。使用外部键盘时不会出现屏幕键盘,因此没有理由调整窗口大小。

如果用户使用的是分体式键盘,则您不必担心调整窗口大小。如果他们拆分键盘,他们可以将键盘放在 UI 的中间,这使得重新排列您的 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 块为您的 tableview 的帧更改设置动画,使其不会被键盘遮挡。

在keyboardWillHide: 你只需要从NSNotification 中获取animationDuration(和上面的方法一样)(高度显然会是0)。然后使用另一个 UIView animateWithDuration 块将您的 tableview 调整为原始大小

于 2013-09-11T16:52:47.310 回答