0

У меня есть приложение для раскадровки, в котором есть несколько контроллеров представлений, которые нужно вводить программным путем, а не с помощью segues. Я использую следующий код, чтобы сделать это:Сохранение позиции прокрутки при нажатии на ViewController в коде в приложении раскадровки

POCollectionViewController* vc = [self.storyboard instantiateViewControllerWithIdentifier:@"categoryView"]; 
POCategory* destination = (POCategory*)self.collections[indexPath.row]; 
[vc setShowingCollection:destination]; 
[self.navigationController pushViewController:vc animated:YES]; 

Моя проблема заключается в том, что, когда я использую перетекает нажать контроллеры просмотра и нажатии кнопки «назад», сохраняется положение прокрутки, но когда я использую выше кода и нажмите кнопку «назад», мой предыдущий контроллер просмотра появится со строкой прокрутки вверху.

Повторно ли он создает экземпляр контроллера представлений, который должен находиться уже в стеке навигации? Как сохранить положение прокрутки?

РЕДАКТИРОВАТЬ Код для setShowingCollection:

-(void)setShowingCollection:(POCategory*)collection 
{ 
    self->showingCollection = collection; 
    self.title = collection.name; 

    self.HUD = [MBProgressHUD showHUDAddedTo:self.view animated:YES]; 
    self.HUD.delegate = self; 
    [self.HUD showWhileExecuting:@selector(buildDisplayItems) onTarget:self withObject:nil animated:YES]; 
} 

Метод buildDisplayItems извлекает кучу данных от сервера на основе ID коллекции, показывающая в.

+0

ли вы когда-нибудь установить позицию прокрутки из кода? Это обычная кнопка возврата (метод действия)? – Wain

+0

Нет на оба вопроса. – Shinigami

ответ

0

Я думаю, что вы неправильно выбрасываете контроллер, но не нажимаете на толкаемый контроллер, а всплываете на новый контроллер. Как вы делаете поп-контроллер в своей задней кнопке?

вы должны сделать так:

[self.navigationController popViewControllerAnimated: YES];

+0

Я просто подталкиваю один VC программно, используя 'pushViewController: анимированный:', и я оставляю кнопку возврата и поп-действие на контроллер навигации. – Shinigami

+0

Проблема может быть в методе setShowingCollection. Что вы делаете в этом методе? вы можете показать код? – samir

+0

См. Обновление. – Shinigami

0

Я подумал, что если вы должны создать новый контроллер для каждого «segue», вам нужно будет сохранить положение прокрутки, и когда вы перезагрузите представление, вызовите прокрутку uiscrollview.

Нечто подобное сохраняется в собственности должны сделать трюк:

CGRect scrolledRect = CGRectMake(scrollView.contentOffset.x, scrollView.contentOffset.y, scrollView.bounds.size.width, scrollView.bounds.size.height); 

Тогда при перезагрузке:

[scrollView scrollRectToVisible:scrolledRect animated:NO]; 
+0

Разве навигационный контроллер не должен держать прежние контроллеры представлений в стеке так, как они есть? Я создаю новый VC и нажимаю его. Но для возврата ничего не делается в коде, это просто контроллер навигации, выполняющий свою работу. – Shinigami

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