我正在开发一个静态UITextField
中包含UITextView
和UITableView
的应用。我面临两个问题
UITextField
时,它正确移动但不适用于UITextView
。UITableView
未正确显示。我想要的是在键盘出现和消失时相应地调整UITextField
和UITextView
。这是我的代码。
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow:) name:UIKeyboardWillShowNotification object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillHide:) name:UIKeyboardWillHideNotification object:nil];
- (void)keyboardWillShow:(NSNotification *)notification {
//get the end position keyboard frame
NSDictionary *keyInfo = [notification userInfo];
CGRect keyboardFrame = [[keyInfo objectForKey:@"UIKeyboardFrameEndUserInfoKey"] CGRectValue];
//convert it to the same view coords as the tableView it might be occluding
keyboardFrame = [self.tableView convertRect:keyboardFrame fromView:nil];
//calculate if the rects intersect
CGRect intersect = CGRectIntersection(keyboardFrame, self.tableView.bounds);
if (!CGRectIsNull(intersect)) {
//yes they do - adjust the insets on tableview to handle it
//first get the duration of the keyboard appearance animation
NSTimeInterval duration = [[keyInfo objectForKey:@"UIKeyboardAnimationDurationUserInfoKey"] doubleValue];
//change the table insets to match - animated to the same duration of the keyboard appearance
[UIView animateWithDuration:duration animations:^{
self.tableView.contentInset = UIEdgeInsetsMake(0, 0, intersect.size.height, 0);
self.tableView.scrollIndicatorInsets = UIEdgeInsetsMake(0, 0, intersect.size.height, 0);
}];
}
}
- (void) keyboardWillHide: (NSNotification *) notification{
NSDictionary *keyInfo = [notification userInfo];
NSTimeInterval duration = [[keyInfo objectForKey:@"UIKeyboardAnimationDurationUserInfoKey"] doubleValue];
//clear the table insets - animated to the same duration of the keyboard disappearance
[UIView animateWithDuration:duration animations:^{
self.tableView.contentInset = UIEdgeInsetsZero;
self.tableView.scrollIndicatorInsets = UIEdgeInsetsZero;
}];
}
答案 0 :(得分:0)
尝试使用UITableView的实例方法: scrollToRowAtIndexPath:atScrollPosition:animated:
在keyBoardWillShow中使用tableview或textfield的索引路径,并将滚动位置设置为 UITableViewScrollPositionTop 。
如果它无法正常工作,请尝试使用 scrollToRowAtIndexPath:atScrollPosition:animated:
希望这有帮助,祝你好运! :))
有关详细信息,请查看Apple的UITableView参考:https://developer.apple.com/library/ios/documentation/uikit/reference/UITableView_Class/Reference/Reference.html
答案 1 :(得分:0)
您可以使用第三方库来避免文本字段或文本视图上方的键盘滚动。 使用https://github.com/cokecoffe/ios-demo/blob/master/TPKeyboardAvoiding/TPKeyboardAvoidingScrollView.m
或强>
您可以使用UITableviewController作为视图控制器类。将Tableview内容属性更改为Static。然后,您可以从故事板将任何UI控件添加到表视图的静态单元格。 如果您在tableview中选择任何文本字段或文本视图,则键盘会自动显示文本字段或文本视图的下方,而无需任何编程逻辑。