2013-07-26 4 views
0

Я начал новый проект с IOS 6 ARC и раскадровкиПодкласс UITabBarController в iOS6 с раскадровки

Я сделал очень простое приложение, которое имеет TabBar и 2 просмотров

enter image description here

так что теперь я создал файл TestViewController с расширением UITabBarController, и я помещаю пользовательский класс в раскадровку.

теперь вопрос в том, что я пытаюсь реализовать некоторые методы делегата, как

- (BOOL) tabBarController:(UITabBarController *)tabBarController shouldSelectViewController:(UIViewController *)viewController; 

Но он никогда не называет его. Может ли кто-нибудь помочь?

Я тоже заметил, что если я поместил этот код в первый контроллер, он отлично работает. Кажется, что первый контроллер представления перезаписывает TabBarController раньше. Я очень смущен.

для более тестирования я добавил в TestViewController.m некоторых протоколирований:

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view. 
    NSLog(@"%@",self.tabBarController.viewControllers); 
} 

и контроллеры ракурса нуля.

Я даже пытался делать self.tabBarController.delegate = self;

но до сих пор нет решения.

+0

ОК, поэтому я попробовал еще несколько: когда я добавляю '@property (неатомный, копия) NSArray * viewControllers;' в мой файл TestViewController.h я могу получить доступ к контроллерам представления 2! что хорошо ... теперь, когда я перехожу к первому контроллеру представления и получаю свойство tabBarController и устанавливаю делегат на 'self', тогда все работает ... так почему же в панели управления tabbarcontroller у меня не сразу находится контроллер tabbar, который позже используется ??? –

ответ

1

TestViewController ваш контроллер панели вкладок, так что ваш журнал должен быть просто self.viewControllers, а не self.tabBarController.viewControllers. Вам также не нужно добавлять свойство viewControllers, так как ваш подкласс наследует это свойство от UITabBarController. Причина, по которой ваше сообщение делегата не вызвана, вызвано той же проблемой. Вы должны установить делегат с (в TestViewController):

self.delegate = self; 

Это предполагает, что вы хотите TestViewController быть делегатом, не было ясно для меня, если это то, что вы хотели.

+0

ahh, что делает soooo много смысла :) иногда это может быть так просто ... спасибо –

0

Вы пытались связать их в Interface Builder? Добавить это в файл заголовка первого, хотя @property (nonatomic, retain) IBOutlet UITabBarController *tabBarController;

+0

Я не могу связать их в IB. Просто не позволяю мне. Если я просто добавлю его в файл, он будет просто пустым. –

+0

Вы добавили его в свой appDelegate? – AMAN77

+0

нет ... в классе TestViewController. зачем мне это нужно в appdelegate? –

Смежные вопросы