2016-01-19 3 views
1

У меня есть таблицаView с изображениями. Когда пользователь нажимает на изображение (внутри ячейки), viewController с большей масштабируемой версией изображения вызывается с помощью popover segue. Когда я увольняю popover и возвращаюсь в свой tableView, он автоматически отображает верхнюю ячейку таблицы. Есть ли способ остановить это и вернуться к предыдущей позиции/ячейке до вызова popover?Как остановить UITableView от возврата в верхнюю ячейку после popover

EDIT: Для вызова поповер я использую

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

уволить его я использую следующее:

let tmpController :UIViewController! = self.presentingViewController; 


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

проверить это. Это может быть полезно для вас http://stackoverflow.com/questions/7410845/how-to-disable-scrolling-in-uitableview-table-when-the-content-fits-on-the-scree –

+0

, пожалуйста, предоставьте код по которому вы представляете и отклоняете viewcontroller с большим масштабируемым изображением –

+0

, см. правки @ RamaniAshish – rohaldb

ответ

6

Получите смещение содержимого таблицы перед отображением вашего ZoomViewController.

-(void)viewWillDisappear:(BOOL)animated { 

    [super viewWillDisappear:animated]; 

    tableViewContentOffset = self.tableView.contentOffset; 

} 

и множество TableView снова смещение в viewWillAppear

-(void)viewWillAppear:(BOOL)animated { 

    [super viewWillAppear:animated]; 

    [self.tableView setContentOffset:tableViewContentOffset]; 
} 
+0

Это отличное решение! Однако я предполагаю, что это объективный C? Вот что я поставил (Swift) вар tableViewContentOffset = CGPointMake (0, 0) переопределение FUNC viewWillDisappear (анимированные: Bool) { tableViewContentOffset = self.tableView.contentOffset; } переопределение функ viewWillAppear (анимированный: Bool) { self.tableView.contentOffset = tableViewContentOffset } – rohaldb

+0

Спасибо за такое отличное решение. :) – Sid

1

пожалуйста, проверьте, если вы звоните в reloadDataviewWillAppear или viewDidAppear. или если вы звоните любым reloadsection в любой из этих двух методов.

Вы также можете проверить эти звонки также в методах viewWillDisappear/viewDidDisappear.

0

Cache выбран indexPath выбранной ячейки изображения, и в viewWillAppear методе

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

Это будет прокручиваться назад к выбранному изображению ряд.

2

Скорее всего, причиной такого поведения является то, что вы вызываете перезагрузку таблицы где-то между открытием и закрытием вида popover (возможно, внутри одного или нескольких из этих методов, таких как viewDidAppear, viewWillAppear и т. Д.). Если вы можете просто удалить его, тогда он не будет прокручиваться вверх.

или вы можете сохранить содержание смещения непосредственно перед открытием вид поповер затем установить смещение после его закрытия,

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

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

Что делает super.viewdidAppear (анимированный)? – rohaldb

+0

лучше вызвать супер метод для этих типов методов, когда вы переопределяете их – RJE

Смежные вопросы