Вызов popToRootViewControllerAnimated после dismissModalViewControllerAnimated - PullRequest
6 голосов
/ 04 октября 2010

Я работаю с приложением, в котором я звоню presentModalViewController и после завершения (звоню dismissModalViewControllerAnimated:YES) оно должно немедленно вызвать popToRootViewControllerAnimated.

Но проблема в том, что dismissModalViewControllerAnimated:YES работает правильно, но popToRootViewControllerAnimated не работает после него.

Код показан ниже:

[self.navigationController dismissModalViewControllerAnimated:YES] ;
[self.navigationController popToRootViewControllerAnimated:YES];

Ответы [ 4 ]

6 голосов
/ 04 октября 2010

Попробуйте что-то вроде этого:

[self.navigationController dismissModalViewControllerAnimated:YES] ;
[self performSelector:@selector(patchSelector) withObject:nil afterDelay:0.3];


-(void)patchSelector{
  [self.navigationController popToRootViewControllerAnimated:YES]; 
}

Это не так аккуратно, но должно работать.

UPDATE: Вы должны использовать

 [self dismissModalViewControllerAnimated:YES];

вместо

 [self.navigationController dismissModalViewControllerAnimated:YES] ;

Объектом, представляющим модальное пространство, является контроллер вида, а не контроллер навигации.

2 голосов
/ 10 августа 2011

Если у вас есть контроллер навигации со стеком UIViewControllers:

[self dismissModalViewControllerAnimated:YES];
[(UINavigationController*)self.parentViewController popToRootViewControllerAnimated:YES];
//UIViewController *vc = [[UIViewController new] autorelease];
//[(UINavigationController*)self.parentViewController pushViewController:vc animated:YES];

Предполагается, что контроллер представления, в котором вызываемый контроллер модального представления, имеет навигационный контроллер.

0 голосов
/ 20 октября 2011

Я столкнулся с чем-то похожим на это.Сначала вам нужно сделать копию вашего self.navigationcontroller, а также сохранить себя, поэтому при вызове второго всплывающего окна все еще есть ссылка на NC, и вы все еще существуете.

    // locally store the navigation controller since
    // self.navigationController will be nil once we are popped
UINavigationController *navController = self.navigationController;

    // retain ourselves so that the controller will still exist once it's popped off
[[self retain] autorelease];

    // Pop this controller and replace with another
[navController popViewControllerAnimated:NO];
[navController pushViewController:someViewController animated:NO];

см. Как я могу получить представление из UINavigationController и заменить его другим в одной операции?

0 голосов
/ 04 октября 2010

Полагаю, вы не вызываете

[self.navigationController popToRootViewControllerAnimated:YES];

в целевом модальном viewcontroller.проверьте это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...