我有一个充满图像的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);
});
答案 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)
如果您在reloadData
或viewWillAppear
致电viewDidAppear
,请检查。
或者如果你在这两种方法中的任何一种中调用任何reloadsection
。
您也可以在viewWillDisappear
/ viewDidDisappear
方法中验证这些来电。
答案 3 :(得分:0)
缓存所选图像单元格的选定indexPath
,并使用viewWillAppear
方法
if(selectedPath != nil) {
[self.tableView scrollToRowAtIndexPath:selectedPath atScrollPosition:UITableViewScrollPositionBottom animated:YES];
}
这将滚动回您选择的图像行。