[英]how to set UITableView's scroll position to previous location when click “load earlier items” button
[英]how to set UITableView's scroll position to previous Position in ios
当单击单元格中的文本字段时,然后打开键盘并滚动tableview。
textFieldShouldReturn:
调用然后将tableview设置为Previous Position。 我怎样才能做到这一点?
我的Tableview滚动代码
- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField
{
CGPoint point = [textField.superview convertPoint:textField.frame.origin toView:tblemailconfiguration];
CGPoint contentOffset = tblemailconfiguration.contentOffset;
contentOffset.y += (point.y - contentOffset.y - self.navigationController.navigationBar.frame.size.height); // Adjust this value as you need
[tblemailconfiguration setContentOffset:contentOffset animated:YES];
return YES;
}
就像下面这样:
- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField
{
CGPoint point = [textField.superview convertPoint:textField.frame.origin toView:tblemailconfiguration];
CGPoint contentOffset = tblemailconfiguration.contentOffset;
// Record the tableview's content offset when editing begin
lastContentOffset = contentOffset;
contentOffset.y += (point.y - contentOffset.y - self.navigationController.navigationBar.frame.size.height); // Adjust this value as you need
[tblemailconfiguration setContentOffset:contentOffset animated:YES];
return YES;
}
- (void)textFieldDidEndEditing:(UITextField *)textField {
// When editing reach end, just set tableview's content offset to last.
[tblemailconfiguration setContentOffset:lastContentOffset animated:YES];
}
在viewWillAppear中添加观察者
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWasShown:) name:UIKeyboardDidShowNotification object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillBeHidden:) name:UIKeyboardDidHideNotification object:nil];
删除viewWillDisappear中的Observer
[[NSNotificationCenter defaultCenter] removeObserver:self name:UIKeyboardWillHideNotification object:nil];
[[NSNotificationCenter defaultCenter] removeObserver:self name:UIKeyboardWillShowNotification object:nil];
现在,在您的视图控制器中添加此方法
#pragma mark - keyboard Hide Show
-(void) keyboardWasShown:(NSNotification *)notification
{
//Manages scrollview content on keyboard hide show
NSDictionary *info = [notification userInfo];
NSValue *kbFrame = [info objectForKey:UIKeyboardFrameEndUserInfoKey];
CGRect keyboardFrame = [kbFrame CGRectValue];
CGFloat height = keyboardFrame.size.height;
[_scrollView setContentInset:UIEdgeInsetsMake(0, 0, height, 0)];
[_scrollView setScrollIndicatorInsets:UIEdgeInsetsMake(0, 0, height, 0)];
}
- (void) keyboardWillBeHidden:(NSNotification *)notification
{
//Manages scrollview content on keyboard hide show
UIEdgeInsets contentInsets = UIEdgeInsetsZero;
[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:0.3f];
[_scrollView setContentInset:UIEdgeInsetsMake(0, 0, 0, 0)];
[_scrollView setScrollIndicatorInsets:UIEdgeInsetsMake(0, 0, 0, 0)];
[UIView commitAnimations];
}
#pragma mark - Textfield Delegate Methods -
- (void)textFieldDidBeginEditing:(UITextField *)textField
{
CGRect r = [textField convertRect:textField.frame toView:_scrollView];
[self.scrollView scrollRectToVisible:r animated:YES];
}
我建议在打开键盘之前记录indexPath,然后使用UITableView:scrollToRowAtIndexPath:(NSIndexPath *)indexPath atScrollPosition:(UITableViewScrollPosition)scrollPosition animated:(BOOL)animated
在textFieldShouldReturn:
UITableView:scrollToRowAtIndexPath:(NSIndexPath *)indexPath atScrollPosition:(UITableViewScrollPosition)scrollPosition animated:(BOOL)animated
textFieldShouldReturn:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.