2012-12-04 8 views
5

मुझे पता है कि यह एक बहुत ही दोहराना विषय है, लेकिन मैं इसे काम नहीं कर सकता।TabBarController didSelectViewController काम नहीं कर रहा

MainTab.h:

#import <UIKit/UIKit.h> 

@interface MainTab : UITabBarController<UITabBarControllerDelegate, UITabBarDelegate> { 

    IBOutlet UITabBarController *tabController; 

} 

@property (nonatomic,retain) IBOutlet UITabBarController *tabController; 

@end 

MainTab.m

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil 
{ 
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; 
    if (self) { 
     // Custom initialization 
    } 
    return self; 
} 

- (void)viewDidLoad 
{ 
    NSLog(@"main tab"); 
    [super viewDidLoad]; 

    self.tabBarController.delegate = (id)self; 
    [self setDelegate:self]; 

    // Do any additional setup after loading the view. 
} 

- (void)viewDidUnload 
{ 
    [super viewDidUnload]; 
    // Release any retained subviews of the main view. 
} 


-(void) tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController 
{ 

    NSLog(@"selected %d",tabBarController.selectedIndex); 

} 

मैं मैं क्या याद कर रहा हूँ नहीं मिल सकता है, किसी भी मदद की सराहना की जाएगी।

अब मैं MainStoryBoard में लिंक करने का प्रयास करें:

enter image description here

enter image description here

लेकिन यह does not काम, कनेक्शन क्या हैं?

+0

कैसे करते हैं बनाया है 'MainTab' वस्तु ?? –

+0

@Rob हां, आप सही हैं - मैंने किसी भी तरह से प्रश्न के "नियंत्रक" भाग को याद किया है, यह सोचकर कि यह एक टैब बार घटक के साथ एक कस्टम नियंत्रक है। मैंने अपनी टिप्पणी हटा दी, और आपके विस्तृत उत्तर के लिए मतदान किया। – dasblinkenlight

उत्तर

15

अपने @interface (और आपके बाद स्क्रीन स्नैपशॉट) के आधार पर, MainTabUITabBarController है, इसलिए निम्न पंक्ति:

self.tabBarController.delegate = (id)self; 

सिर्फ होना चाहिए:

self.delegate = self; 

आप नहीं करते tabBarControllerUITabBarController में संपत्ति चाहते हैं, और न ही आप self.tabBarController सिंटैक्स का उपयोग करना चाहते हैं। यदि आप टैब बार नियंत्रक को अपने बच्चों के नियंत्रकों में से किसी एक से संदर्भित करने का प्रयास कर रहे हैं तो आप केवल उस वाक्यविन्यास का उपयोग करें। जब टैब बार नियंत्रक में, केवल self देखें।


इस प्रकार, यह काम करता है, तो MainBar के रूप में परिभाषित किया गया है:

// MainBar.h 

#import <UIKit/UIKit.h> 

@interface MainBar : UITabBarController 

@end 

और

// MainBar.m 

#import "MainBar.h" 

@interface MainBar() <UITabBarControllerDelegate> 

@end 

@implementation MainBar 

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    self.delegate = self; 
} 

-(void) tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController 
{ 
    NSLog(@"selected %d",tabBarController.selectedIndex); 
} 

@end 

और भूल नहीं है टैब बार नियंत्रक के वर्ग सेट करने के लिए:

interface builder

कनेक्शन निरीक्षक (जहां मैं एक बात स्पर्श नहीं किया था) की तरह दिखता है:

outlets

+0

आपने जो कहा वह काफी रोचक है, लेकिन यह अभी भी काम नहीं करता – user1256477

+0

नहीं, मैं नहीं कर सकता! जब मैं नियंत्रित करने की कोशिश करता हूं + ड्रैग मैं टैबइटम – user1256477

+1

मेनटाब सही ढंग से सेट किया गया था, तो मुझे इसकी जांच करने के लिए एनएसएलओजी था, यह आपके कोड – user1256477

संबंधित मुद्दे