Метод didSelectViewController моего UITabBarController не вызывается?

Вот моя заглушка кода для моего app-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, вам нужно установить себя в качестве делегата, потому что вы не можете напрямую изменить делегата 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. какой класс вы определяете в билдере и правильно ли он подключен к вашей треске? - person mobibob; 28.10.2010