2010-12-11 6 views
11

लॉन्च करता हूं तो आइटम पर क्लिक करने के बाद मैं एक समस्या है।UITabBarItems UITabBarItems में जब मैं एप्लिकेशन को

मैं अपनी एप्लिकेशन विंडो में UITabBar सेट अप कर रहा हूं और दृश्य फ़ाइलों में आइकन सेट कर रहा हूं। लेकिन जब मैं ऐप चलाता हूं, तो पहला आइकन दिखाई देता है (क्योंकि दृश्य मुझे लगता है लोड किया गया है) और अन्य आइकन तब तक दिखाई नहीं देते जब तक कि मैं उन्हें क्लिक नहीं करता।

क्या मुझे पर किसी अन्य विधि में self.tabBarItem लागू करने की आवश्यकता है?

सभी को अग्रिम धन्यवाद!

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {  
    tabBar = [[UITabBarController alloc] init]; 

    SubscriptionsController *subscriptionsController = [[SubscriptionsController alloc] init]; 
    FavoritesController *favoritesController = [[FavoritesController alloc] init]; 
    CategoriesController *categoriesController = [[CategoriesController alloc] init]; 
    TagsController *tagsController = [[TagsController alloc] init]; 
    HelpScreenController *helpScreenController = [[HelpScreenController alloc] init]; 

    tabBar.viewControllers = [NSArray arrayWithObjects: 
     subscriptionsController, 
     favoritesController, 
     categoriesController, 
     tagsController, 
     helpScreenController, 
     nil 
     ]; 

    [window addSubview:tabBar.view]; 

    // Override point for customization after application launch. 
    [window makeKeyAndVisible]; 
    return YES; 
} 

//The View 

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    tabIcon = [[UITabBarItem alloc] initWithTitle:@"Abonime" image:[UIImage imageNamed:@"subscr.png"] tag:0]; 
    self.tabBarItem = tabIcon; 
    [tabIcon release]; 
} 

उत्तर

12

मुझे लगता है कि आप एक दृश्य नियंत्रक के नामित प्रारंभकर्ता में tabBarItem गुण सेट करना चाहिए (अपने कोड से पहचानने, यह नियंत्रकों से प्रत्येक के लिए -init होना चाहिए)। वास्तव में, टैब बार नियंत्रक मांग पर विचारों को लोड करने के लिए पर्याप्त स्मार्ट है, यानी, टैबबर्टम संपत्ति viewDidLoad भेजने से पहले सेट की जानी चाहिए।

इसके अलावा, आप सभी दृश्य नियंत्रकों को लीक कर रहे हैं। इसे ठीक करने के लिए, निम्न कार्य करें:

SubscriptionsController *subscriptionsController = [[[SubscriptionsController alloc] init] autorelease]; 
+0

धन्यवाद एक बहुत! :) यह बेकार ढंग से काम किया :) – Olsi

+0

मैं इसे स्विफ्ट 2 में कैसे कर सकता हूं? – deepakssn

+0

यह अभी भी 7 साल बाद स्विफ्ट में मुद्दों को हल करता है। – SQLiteNoob

4

सही। आइकन दिखाई नहीं देते हैं क्योंकि दृश्य (पहले के अलावा, अभी तक लोड नहीं किया गया है)। और जब तक आप एक दृश्य टैप नहीं करते हैं तब तक लोड नहीं होता है क्योंकि तब तक ViewDidLoad को कॉल नहीं किया जाता है।

व्यक्ति UIViewControllers viewDidLoad में कोड निकालें और यह करें ...

NSArray *controllers = [NSArray arrayWithObjects: 
               [NSDictionary dictionaryWithObjectsAndKeys:@"SubscriptionsController", @"class", [UIImage imageNamed:@"btn_tax.png"], @"icon", @"Abonime", @"title", nil], 
               [NSDictionary dictionaryWithObjectsAndKeys:@"FavoritesController", @"class", [UIImage imageNamed:@"btn_tax.png"], @"icon", @"Abonime", @"title", nil], 
               [NSDictionary dictionaryWithObjectsAndKeys:@"CategoriesController", @"class", [UIImage imageNamed:@"btn_tax.png"], @"icon", @"Abonime", @"title", nil], 
               [NSDictionary dictionaryWithObjectsAndKeys:@"TagsController", @"class", [UIImage imageNamed:@"btn_tax.png"], @"icon", @"Abonime", @"title", nil], 
               [NSDictionary dictionaryWithObjectsAndKeys:@"HelpScreenController", @"class", [UIImage imageNamed:@"btn_tax.png"], @"icon", @"Abonime", @"title", nil], 
               nil]; 

NSMutableArray *controllerArray = [NSMutableArray array] ; 

for (NSUInteger i = 0; i < [controllers count]; i++) 
{ 
    id newClass = [[NSClassFromString([[controllers objectAtIndex:i] objectForKey:@"class"]) alloc] init]; 
    UITabBarItem *tabItem = [[UITabBarItem alloc] init]; 
    tabItem.image = [[controllers objectAtIndex:i] objectForKey:@"icon"]; 
    tabItem.title = [[controllers objectAtIndex:i] objectForKey:@"title"]; 
    tabItem.tag = i; 
    [(UIViewController*)newClass setTabBarItem:tabItem]; 
    [tabItem release]; 
    [controllerArray addObject:newClass]; 
    [newClass release]; 
} 

tabBar.viewControllers = controllerArray;