如何阻止UITableView在弹出后返回顶部单元格

时间:2016-01-19 04:46:37

标签: ios swift uitableview segue

我有一个充满图像的tableView。当用户点击图像(在单元格内)时,使用popover segue调用具有较大可缩放版本图像的viewController。当我解除弹出窗口并返回到我的tableView时,它会自动显示表格的顶部单元格。有没有办法阻止这种情况发生,并在调用popover之前返回上一个位置/单元格?

编辑: 要调用popover我使用

performSegueWithIdentifier("segueToPopOver", sender: tap.view)

解雇它我使用以下内容:

 let tmpController :UIViewController! = self.presentingViewController;


 self.dismissViewControllerAnimated(true, completion: {()->Void in
        tmpController.dismissViewControllerAnimated(true, completion: nil);
    });

4 个答案:

答案 0 :(得分:6)

在显示zoomViewController之前获取tableview内容偏移量。

-(void)viewWillDisappear:(BOOL)animated {

  [super viewWillDisappear:animated];

  tableViewContentOffset = self.tableView.contentOffset;

}

并在viewWillAppear

中再次设置tableview偏移量
-(void)viewWillAppear:(BOOL)animated {

   [super viewWillAppear:animated];

   [self.tableView setContentOffset:tableViewContentOffset];
 }

答案 1 :(得分:2)

这种行为的原因很可能是你在打开和关闭popover视图之间调用table reload(可能在viewDidAppear,viewWillAppear等一个或多个方法中)。如果您可以简单地删除它,那么它就不会滚动到顶部。

或者你可以在打开popover视图之前保持内容偏移,然后在关闭它之后设置偏移

override func viewDidAppear(animated: Bool) {
    super.viewDidAppear(animated)
    tableView.contentOffset = offset
}

override func viewDidDisappear(animated: Bool) {
    super.viewDidDisappear(animated)
    offset = tableView.contentOffset
}

答案 2 :(得分:1)

如果您在reloadDataviewWillAppear致电viewDidAppear,请检查。 或者如果你在这两种方法中的任何一种中调用任何reloadsection

您也可以在viewWillDisappear / viewDidDisappear方法中验证这些来电。

答案 3 :(得分:0)

缓存所选图像单元格的选定indexPath,并使用viewWillAppear方法

    if(selectedPath != nil) {
        [self.tableView scrollToRowAtIndexPath:selectedPath atScrollPosition:UITableViewScrollPositionBottom animated:YES];
     }

这将滚动回您选择的图像行。