2013-05-06 10 views
15

Ich möchte einen Tab Bar Controller zu meinem aktuellen App Flow hinzufügen. Zur Zeit habe ich eine Seite mit einer Schaltfläche, die beim Klicken einen neuen Viewcontroller mit einer Webansicht öffnet, in dem sich der Benutzer anmeldet und nach der Anmeldung möchte ich ihn zu seiner Home Page bringen, wo die Navigationsleiste seinen Namen und eine Logout-Taste in der rechten hat . Die Homepage sollte auch eine Tab-Leiste mit 3 verschiedenen Tabs haben. Ich kann die Homepage-Ansicht von der Webansicht laden und die Navigationsleiste abrufen. Aber ich kann die tabBar nicht hinzufügen und es funktioniert. Ich bin nicht sicher, wo ich den Code zum Hinzufügen von TabBar hinzufügen soll. Ich verwende den folgenden Code Tab-Leiste hinzufügen -Hinzufügen eines Tab Bar Controllers programmgesteuert zum aktuellen App Flow

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]; 

Zur Zeit habe ich den obigen Code in der viewDidLoad eines Viewcontroller TabViewController setzen die UITabBarController erstreckt. In meinem webView Controller habe ich den folgenden Code setzen -

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

Aber die App stürzt ab, sobald ich eine beliebige Registerkarte klicken andere als die bereits geöffnet. Bitte Hilfe.

+0

Sie haben Ihre Ansicht Baum zu überprüfen ... In welchen Ansicht, dass Sie Tab-Leiste hinzufügen .. – Shivaay

+0

Ich möchte die Registerkarte in der Ansicht hinzufügen, die nach der Protokollierung kommt in - d. h. die Ansicht nach der Webansicht in dem Ansichtsbaum. –

+0

Haben Sie versucht, einen 'UINavigationController' als root viewcontroller zu erstellen und Ihren TabViewController bei der Anmeldung zu drücken? – Devang

Antwort

39

Die Art, wie ich dies in der Vergangenheit getan habe, ist eine UITabBarController Unterklasse zu erstellen, die alle tabBar Erstellungscode enthält, die Sie oben haben.

Dann verwenden Sie Ihre UINavigationController, um die tabBar Unterklasse auf den Bildschirm zu schieben.

Hier ist eine Probe meiner UITabBarController Unterklasse:

- (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

Schöne Antwort funktioniert super –

2

Set Delegierter UITabBarDelegate

hier TabBar- Viewcontroller Bild 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; 
    } 
} 
Verwandte Themen