2013-05-06 11 views
15

Desidero aggiungere un controller di barra delle schede al flusso di app corrente. Attualmente ho una pagina con un pulsante che al clic apre un nuovo viewcontroller con una vista web in cui l'utente accede e dopo l'accesso voglio portarlo alla sua pagina iniziale dove la barra di navigazione ha il suo nome e un pulsante di disconnessione nella parte destra . La home page dovrebbe anche avere una barra delle schede con 3 diverse schede. Sono in grado di caricare la vista della pagina iniziale dalla visualizzazione Web e ottenere la barra di navigazione. Ma non riesco ad aggiungere tabBar e farlo funzionare. Sono confuso su dove aggiungere il codice per aggiungere TabBar. Sto usando il codice qui sotto per aggiungere barra delle schede -Aggiungere un controller di barra delle schede al livello di flusso delle applicazioni corrente

UITabBarController *tabBar = [[UITabBarController alloc] init]; 

HomeViewController *home = [[PPHomeViewController alloc] initWithUserName:[self.userInfo objectForKey:@"name"] Email:[self.userInfo objectForKey:@"email"] Phone:[self.userInfo objectForKey:@"phone_number"]]; 
home.tabBarItem = [[UITabBarItem alloc]initWithTabBarSystemItem:UITabBarSystemItemFavorites tag:1]; 
UINavigationController *homeNavController = [[UINavigationController alloc]initWithRootViewController:home]; 

RequestViewController *req = [[RequestMoneyViewController alloc]init]; 
req.tabBarItem = [[UITabBarItem alloc]initWithTabBarSystemItem:UITabBarSystemItemFavorites tag:2]; 
UINavigationController *reqNavController = [[UINavigationController alloc]initWithRootViewController:req]; 

UIViewController *thirdViewController = [[UIViewController alloc]init]; 
thirdViewController.tabBarItem = [[UITabBarItem alloc]initWithTabBarSystemItem:UITabBarSystemItemFavorites tag:3]; 
UINavigationController *thirdNavController = [[UINavigationController alloc]initWithRootViewController:thirdViewController]; 

UIViewController *fourthViewController = [[UIViewController alloc]init]; 
thirdViewController.tabBarItem = [[UITabBarItem alloc]initWithTabBarSystemItem:UITabBarSystemItemFavorites tag:3]; 
UINavigationController *fourthNavController = [[UINavigationController alloc]initWithRootViewController:fourthViewController]; 

tabBar.viewControllers = [[NSArray alloc] initWithObjects:homeNavController, reqNavController, thirdNavController, fourthNavController, nil]; 
tabBar.delegate=self; 
tabBar.selectedIndex=0; 

UIImageView *homeImg=[[UIImageView alloc]initWithFrame:CGRectMake(0, 432, 80, 49)]; 
homeImg.tag=11; 
homeImg.image=[UIImage imageNamed:@"footer"]; 

UIImageView *reqImg=[[UIImageView alloc]initWithFrame:CGRectMake(81, 432,80, 49)]; 
reqImg.tag=12; 
reqImg.image=[UIImage imageNamed:@"footer"]; 

UIImageView *sendImg=[[UIImageView alloc]initWithFrame:CGRectMake(162, 432,80, 49)]; 
sendImg.tag=13; 
sendImg.image=[UIImage imageNamed:@"footer"]; 

UIImageView *localImg=[[UIImageView alloc]initWithFrame:CGRectMake(243, 432, 80, 49)]; 
localImg.tag=14; 
localImg.image=[UIImage imageNamed:@"footer"]; 

[tabBar.view addSubview:homeImg]; 
[tabBar.view addSubview:reqImg]; 
[tabBar.view addSubview:sendImg]; 
[tabBar.view addSubview:localImg]; 

[[[UIApplication sharedApplication]keyWindow]addSubview:tabBar.view]; 

Attualmente ho messo il codice in alto nel viewDidLoad di un TabViewController ViewController che si estende UITabBarController. Nel mio controller WebView ho messo il seguente codice -

TabViewController *tab=[[TabViewController alloc] init]; 
tab.userInfo=userInfo; 
[self presentViewController:tab animated:YES completion:nil]; 

Ma l'applicazione va in crash non appena clicco una qualsiasi scheda diversa da quella già aperta. Per favore aiuto.

+0

si controlla la tua vista ad albero ... In quale guarda che stai aggiungendo la barra delle schede .. – Shivaay

+0

Voglio aggiungere il tabBar nella vista che viene dopo la registrazione in - cioè la vista dopo la vista Web nell'albero della vista. –

+0

Hai provato a creare un 'UINavigationController' come un root viewcontroller e spingi TabViewController all'accesso? – Devang

risposta

39

Il modo in cui l'ho fatto in passato è creare una sottoclasse tabBar di cui sopra.

Quindi utilizzare UINavigationController per spingere la sottoclasse tabBar sullo schermo.

Ecco un esempio del mio UITabBarController sottoclasse:

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    UIViewController *view1 = [[UIViewController alloc] init]; 
    UIViewController *view2 = [[UIViewController alloc] init]; 
    UIViewController *view3 = [[UIViewController alloc] init]; 

    NSMutableArray *tabViewControllers = [[NSMutableArray alloc] init]; 
    [tabViewControllers addObject:view1]; 
    [tabViewControllers addObject:view2]; 
    [tabViewControllers addObject:view3]; 

    [self setViewControllers:tabViewControllers]; 
    //can't set this until after its added to the tab bar 
    view1.tabBarItem = 
     [[UITabBarItem alloc] initWithTitle:@"view1" 
            image:[UIImage imageNamed:@"view1"] 
             tag:1]; 
    view2.tabBarItem = 
     [[UITabBarItem alloc] initWithTitle:@"view2" 
            image:[UIImage imageNamed:@"view3"] 
             tag:2]; 
    view3.tabBarItem = 
     [[UITabBarItem alloc] initWithTitle:@"view3" 
            image:[UIImage imageNamed:@"view3"] 
             tag:3];  
} 
+0

Bella risposta funzionante alla grande –

2

Set Delegato immagine UITabBarDelegate

qui TabBar viewController http://prntscr.com/ba5oks

#pragma mark- Tapbar delegate 

- (void)deselectTabBarItem:(UITabBar*)tabBar 
{ 
    tabBar.selectedItem = nil; 
} 

- (void)tabBar:(UITabBar *)tabBar didSelectItem:(UITabBarItem *)item 
{ 
    [self performSelector:@selector(deselectTabBarItem:) withObject:tabBar afterDelay:0.2]; 

    switch (item.tag) { 
     case 0: 
      //perform action 
      break; 
     case 1: 
      //do whatever you want to do. 
      break; 
     case 2: 
      //call method 
      break; 
     default: 
      break; 
    } 
} 
Problemi correlati