嗨我在单元格内部有一个UItextField,它在开始编辑时被虚拟键盘覆盖。这是我用来说明viewController
中组件的JSON表示MyViewController : {
UIView : {
UIView : {
height : 100
},
UITableView : {
cell1 : myCell,
cell2 : myCell,
cell3 : myCell,
cell4 : {
UITextField
}
}
}
}
当我开始编辑TextField时,我该怎么办才能使视图向上滚动?
答案 0 :(得分:0)
您希望在键盘即将显示时调整受影响视图的内容插入内容。然后在键盘解除后将其重置为0.
答案 1 :(得分:0)
标准做法是在键盘可见时使用滚动视图滚动视图内容。 Apple在其文档Managing the Keyboard中提供了代码示例:
清单5-3调整内容视图的框架并滚动a 键盘上方的字段
- (void)keyboardWasShown:(NSNotification*)aNotification { NSDictionary* info = [aNotification userInfo]; CGSize kbSize = [[info objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size; CGRect bkgndRect = activeField.superview.frame; bkgndRect.size.height += kbSize.height; [activeField.superview setFrame:bkgndRect]; [scrollView setContentOffset:CGPointMake(0.0, activeField.frame.origin.y-kbSize.height) animated:YES];
}
注册键盘通知需要执行其他步骤,所有步骤都包含在上述文档中。
文档中提到的其他方法,其中没有一个是自动的。有时候,当这些基本功能需要额外的代码时,我们会提醒用Apple的开发工具还有改进的余地。
答案 2 :(得分:0)
首先,当键盘出现时,你需要从iOS获得通知。
在viewDidLoad中,您可以将VC注册到observ:
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(keyboardWillShown:)
name:UIKeyboardWillShowNotification object:nil];
现在,当键盘出现时,将调用您的keyboardWillShown:方法。 在keyboardWillShown:您想要更改tableViews contentInset的方法。您就是这样做的:
- (void)keyboardWillShown:(NSNotification*)aNotification {
NSDictionary* info = [aNotification userInfo];
self.keyboardSize = [[info objectForKey:UIKeyboardFrameBeginUserInfoKey]CGRectValue].size;
UIEdgeInsets contentInsets = UIEdgeInsetsMake(0.0, 0.0,self.keyboardSize.height, 0.0);
self.tableView.contentInset = contentInsets;
self.tableView.scrollIndicatorInsets = contentInsets;
[self scrollToContent];
}
现在您更改了tableViews contentInset,并将键盘大小保存到属性(keyboardSize),但未检查您的内容是否可见。在最后一行中,我调用了scrollToContent方法,该方法将tableView滚动到所需位置:
-(void)scrollToShowActiveField {
//your views size
CGRect myViewRect = self.view.frame;
//substract the keyboards size
myViewRect.size.height -= self.kbSize.height;
//offsettedFrame is your UITextView
CGRect offsettedFrame = self.activeField.frame;
//we want to see some "padding" between the textview and the keyboard so I add some padding
offsettedFrame.origin.y += 100;
if (!CGRectContainsPoint(myViewRect, offsettedFrame.origin) ) {
[self.tableView scrollRectToVisible:offsettedFrame animated:YES];
}
}
我认为您的UITableView具有全屏大小。如果没有,那么您需要根据需要调整contentInset大小。