2010-01-20 2 views
28

У меня есть uinavigationcontroller. После входа в систему я хочу удалить контроллеры просмотра, такие как RegisterViewController, LoginViewController и т. Д. Из стека UInavigationcontroller.Как удалить определенный контроллер просмотра из стека yinavigationcontroller?

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

Я проверил этот пост

http://starterstep.wordpress.com/2009/03/05/changing-a-uinavigationcontroller’s-root-view-controller/

Таким образом, мы можем принять его в массив как

NSArray *allviewcontrollers= [(UINavigationController *)navigationController viewControllers]; 

Но как сделать дальнейший процесс .. Этот вопрос охотится меня в течение длительного времени. .Пожалуйста, ответьте мне. Спасибо заранее.

ответ

82
NSMutableArray *allViewControllers = [NSMutableArray arrayWithArray: navigationController.viewControllers]; 
[allViewControllers removeObjectIdenticalTo: removedViewController]; 
navigationController.viewControllers = allViewControllers; 
+0

Спасибо, что ответили на меня. Но у меня есть сомнения во втором сообщении. LoginViewController * loginViewController = [LoginViewController alloc]; [allViewControllers removeObjectIdenticalTo: loginViewController]; Но это не сработало. Но когда я попробовал [allViewControllers removeObjectAtIndex: 0]; Это сработало. Я хочу что-то подобное, на что ты ответил. Я также попробовал [allViewControllers removeObjectIdenticalTo: @ "LoginViewController"]; Но это не сработало. Пожалуйста, уточните меня. Спасибо ... –

+0

У меня были некоторые сомнения относительно того, как удалить конкретный вид. И я поставил вопрос на это и получил ответ. http://stackoverflow.com/questions/2100450/how-to- check-a-uiviewcontroller-is-present-in-uinavigationcontroller-stack/2101034 # 2101034 –

+1

Где-то в вашем коде вы создали, скажем, LoginViewController с + alloc и -initWithNibName: bundle :. Это может быть ваш делегат приложения, я не знаю, как ваше приложение архивировано. В любом случае, чтобы надежно удалить контроллер, вы должны сохранить ссылку на него (например, как ivar в делете приложения). «RemoveViewController» в приведенном выше фрагменте - это просто эта ссылка. Да, вы можете пройти через массив контроллеров, которые ищут контроллер определенного класса. Но что, если в один прекрасный день у вас будет два или три из них при продлении вашего приложения? Мои 2 цента. – Costique

1

Здесь i с моим решением. Вы можете установить тег или фиксированное свойство для своих контроллеров view, тогда вы можете пройти через стеки uinavigationcontroller для поиска в целевом контроллере (vcToRemove) и удалить его. Это может быть безопаснее. Код:

NSInteger tag = vcToRemove.wvTag; 
NSMutableArray *allViewControllers = [NSMutableArray arrayWithArray: vcToRemove.navigationController.viewControllers]; 
     int i = 1; 
     for (i = 1; i <=[allViewControllers count]; i++) { 
      UIViewController *vc = [allViewControllers objectAtIndex:i]; 
      if ([vc isKindOfClass:[MyWebViewController class]]) { 
       if (((MyWebViewController *)vc).wvTag == tag) { 
        [allViewControllers removeObjectAtIndex:i]; 
        break; 
       } 
      } 
     } 

     vcToRemove.navigationController.viewControllers = allViewControllers; 
Смежные вопросы