简体   繁体   English

如何在iOS中将UITableView的滚动位置设置为上一个Position

[英]how to set UITableView's scroll position to previous Position in ios

When Click on textfield in cell, then open key pad and scroll tableview. 当单击单元格中的文本字段时,然后打开键盘并滚动tableview。

textFieldShouldReturn: call then tableview set Previous Position. textFieldShouldReturn:调用然后将tableview设置为Previous Position。 How can I do this? 我怎样才能做到这一点?

My Tableview Scroll Code 我的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;
}

Just do like below: 就像下面这样:

- (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];
}

Add Observers in viewWillAppear 在viewWillAppear中添加观察者

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWasShown:) name:UIKeyboardDidShowNotification object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillBeHidden:) name:UIKeyboardDidHideNotification object:nil];

Remove Observer in viewWillDisappear 删除viewWillDisappear中的Observer

[[NSNotificationCenter defaultCenter] removeObserver:self name:UIKeyboardWillHideNotification object:nil];
[[NSNotificationCenter defaultCenter] removeObserver:self name:UIKeyboardWillShowNotification object:nil];

Now add this methods in your view controller 现在,在您的视图控制器中添加此方法

 #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)animatedtextFieldShouldReturn: UITableView:scrollToRowAtIndexPath:(NSIndexPath *)indexPath atScrollPosition:(UITableViewScrollPosition)scrollPosition animated:(BOOL)animated textFieldShouldReturn:

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM