2012-04-17 5 views
0

В моем приложении у меня есть экран входа в систему, который я представляю модально при запуске. После успешного входа пользователь перенаправляется в UITabBarController, у которого есть пять UINavigationController (для вкладок).Удалить ViewController

На одной вкладке у меня есть кнопка «выход из системы», чтобы пользователь перенаправлялся обратно на экран входа в систему. Это нормально работает.

Но я хочу, чтобы загружать UITabBarController каждый раз, когда пользователь входит в систему. Это означает, что UITabBarController НЕ должен использоваться повторно. На данный момент контент на вкладках (я загружаю данные из Интернета) остается неизменным, также когда новый логин был выполнен.

Как я могу освободить/поп/ноль UITabBarController с помощью UINavigationcontrollers?


Что я пытался до сих пор:

Thats точки, где я подтолкнуть пользователя к экрану входа в систему, когда он нажимает на «выход из системы» кнопку:

[self.navigationController presentModalViewController:navigContrLogin animated:YES]; 

[[self navigationController] popToRootViewControllerAnimated:YES]; --> NOT WORKING 
[self.navigationController popViewControllerAnimated:NO]; --> NOT WORKING 
[self.tabBarController release]; ---> NOT WORKING 

Может кто-нибудь помочь Я пожалуйста?


EDIT: That's как я добавить UITabBarController. Я делаю это, когда пользователь нажимает на кнопку Войти:

[self.navigationController dismissModalViewControllerAnimated:NO];      
[self.navigationController setNavigationBarHidden:YES]; 

[self.navigationController pushViewController:tabBarController animated:NO];  
[self.navigationController removeFromParentViewController]; 

edit2: Я решил. То, что я делаю, - это когда пользователь нажимает кнопку выхода из системы, я вызываю контроллер навигации из делегата приложения и использую его, чтобы нажать диспетчер просмотра входа.

MyAppDelegate *del = (MyAppDelegate*)[UIApplication sharedApplication].delegate; 
    [del.navControllerLogin pushViewController:loginController animated:YES]; 

ответ

0

Вы пытались удалить его из супервизора, а затем отпустить его? А затем добавить новые ViewControllers?

for (UIView *view in self.window.subviews){ 
     if (view == tabBarController.view) { 
      [view removeFromSuperview];    
     } 
} 
[tabBarController release]; 
UITabBarController *newTabBarController = [[UITabBarController alloc] init]; 
newTabBarController.viewControllers = nil; //ADD NEW VIEWCONTROLLERS 
[self.window addSubview:newTabBarController.view]; 
+0

У меня нет объекта окна здесь; мне нужен он для доступа к subviews? – user944351

+0

Можете ли вы опубликовать код yout, где вы добавляете UITabBarController? – TompaLompa

+0

, пожалуйста, см. Мой EDIT – user944351

0

Я бы так не сделал. Поскольку управление (release/ноль) родительским представлением из своего подсмотра не является хорошей практикой.

  1. запуск и отображение контроллера панели после запуска приложения.
  2. если пользователь не вошел в систему, настоящий loginviewcontroller. если он уже не нужен.
  3. после успешного входа в систему отправьте уведомление и запишите необходимые места.
  4. если пользователь отключился при выходе из системы, очистите учетные данные пользователя, данные, связанные с пользователем, и снова представите loginviewcontroller.
+0

, что в основном так, как я делаю это прямо сейчас, но главная проблема заключается в том, что tabbarcontroller не загружается как новый экземпляр после выхода из системы ... – user944351

0

Я бы добавил и удалил как modal view controller, так и tabbarcontroller из appDelegate.

[myAppDelegate addLoginViewController]; 
[myAppDelegate removeLoginViewController]; 
[myAppDelegate addTabBarController]; 
[myAppDelegate removeTabBarController]; 
+0

только loginviewcontroller инициализируется в appdelegate, tabbarcontroller с его subviews инициализируется в viewdidload loginviewcontroller .. вы знаете, что я имею в виду? – user944351

+0

Я знаю, что вы имеете в виду, но я предлагаю, чтобы было бы лучше инициализировать и удалить оба из appDelegate. – ader

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