我有几个UITextField列在彼此之下,并希望在键盘向上滑动时适当移动活动字段。
我已将我的控制器作为观察者添加到UIKeyboardWillShowNotifications中,并且在用户首次点击文本字段时工作正常。如果他在没有让键盘消失的情况下点击其他一个文本字段,则首先不会出现UIKeyboardWillShowNotifications,我没有机会调整新活动文本字段的位置。我想在某种程度上没有UIKeyboardWillShowNotification出现,因为键盘只是停留在那里但是......
怎么做??
我不知道如何在其他地方添加我的调整代码,因为我需要在键盘通知中保存在userInfo中的键盘大小信息。
非常感谢,
斯坦
编辑:如果我在这里粘贴一些代码,可能会更清楚我需要什么:
- (void) viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(cellInputViewWillOpen:) name:UIKeyboardWillShowNotification object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(cellInputViewWillClose) name:UIKeyboardWillHideNotification object:nil];
}
- (void) viewWillDisappear:(BOOL)animated {
[super viewWillDisappear:animated];
[[NSNotificationCenter defaultCenter] removeObserver:self name:UIKeyboardWillShowNotification object:nil];
[[NSNotificationCenter defaultCenter] removeObserver:self name:UIKeyboardWillHideNotification object:nil];
}
- (void) cellInputViewWillOpen:(NSNotification *)aNotification {
CGRect keyboardFrame = [[[aNotification userInfo] objectForKey:UIKeyboardFrameEndUserInfoKey]CGRectValue];
keyboardFrame = [self.view convertRect:keyboardFrame fromView:nil];
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:0.3];
UITableViewCell *cell = [self.tableView cellForRowAtIndexPath:[self.tableView indexPathForSelectedRow]];
self.tableView.contentOffset = CGPointMake(self.tableView.contentOffset.x, cell.frame.origin.y - ((self.tableView.frame.size.height - keyboardFrame.size.height) / 2.0f));
self.tableView.contentInset = UIEdgeInsetsMake(0.0f, 0.0f, keyboardFrame.size.height - 44.0f, 0.0f);
[UIView commitAnimations];
}
- (void) cellInputViewWillClose {
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:0.3];
self.tableView.contentInset = UIEdgeInsetsZero;
[UIView commitAnimations];
}
答案 0 :(得分:1)
请改用textField:didBeginEditing
。如果您的键盘已经显示,您可能需要单独跟踪,这样您就不会滚动两次。