Методът didSelectViewController на моя UITabBarController не се извиква?

Ето моя код за моето приложение-delegate.m -- никога не се извиква.

- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController {
    NSLog(@"%s", __FUNCTION__);
}

Дефинирано е в този app-delegate.h

@interface OrioleAppDelegate : NSObject <UIApplicationDelegate, UITabBarControllerDelegate> {
    UIWindow *window;
    UITabBarController *tabBarController;
}

@property (nonatomic, retain) IBOutlet UIWindow *window;
@property (nonatomic, retain) IBOutlet UITabBarController *tabBarController;

@end

person mobibob    schedule 27.03.2010    source източник
comment
Няма значение, забравих да задам делегата -- опа.   -  person mobibob    schedule 27.03.2010


Отговори (3)


Направихте ли връзка между вашия UITabBarController и делегата на вашето приложение?

- (void)applicationDidFinishLaunching:(UIApplication *)application
{
     ...
     tabBarController.delegate = self;
     ...
}
person Shaggy Frog    schedule 27.03.2010
comment
Да -- забравих, а ти беше твърде бърз :)) Благодаря за отговора със супер лека скорост. - person mobibob; 27.03.2010
comment
По дяволите, опитах, това решение и не работи. Някой от вас може ли да помогне? Поставям кода си тук: Здравейте, имам подобен проблем. Публикувах кода си тук: stackoverflow.com/questions /10891182/‌​wcontroller/10891264. - person John; 05.06.2012

Ако вашият ViewController е UITabBarController, трябва да зададете self като негов делегат, защото не можете да промените делегата на UITabBar директно.

Например във ViewDidLoad на вашия UITabBarController:

- (void)viewDidLoad
{
    [super viewDidLoad];
    self.delegate = self;
}
person CedricSoubrie    schedule 28.02.2013
comment
да, работи и за мен... всъщност го бях пробвал преди и след това потърсих това, за да проверя дали е правилният начин или не, и получих отговора ви, така че ... - person Maulik; 23.04.2013
comment
Това работи и за мен. Използвам това в разширен клас UITabBarController и в моя случай първоначално получих предупреждение на компилатора, което казва: Присвояване на „id‹UITabBarControllerDelegate›“ от несъвместим тип „ECMainTabBarViewController *const __strong“. Поправих това чрез прехвърляне на делегата към тип (id), както следва: self.delegate = (id)self; - person Erik van der Neut; 11.09.2014

Добавих следното tabBarController.delegate = self; и всичко е наред. Надявам се това да е полезно за други.

- (void)applicationDidFinishLaunching:(UIApplication *)application {

    // Add the tab bar controller's current view as a subview of the window
    tabBarController.delegate = self;
    [window addSubview:tabBarController.view];
}
person mobibob    schedule 27.03.2010
comment
Изправен съм пред същия проблем, уверих се, че съм настроил делегат като: tabBarController.delegate = self; но все пак методите на делегата не се извикват. - person Vibhor Goyal; 28.10.2010
comment
проверете за конфликти от вашата IB дефиниция. какъв клас дефинирате в builder-а и правилно ли е свързан към вашия код? - person mobibob; 28.10.2010