UITabBar - два представления (перо) одного класса с использованием раскадровки - PullRequest
5 голосов
/ 19 января 2012

Я использую iOS 5 с раскадровкой.Мой UITabBar создан с использованием Interface Builder.В моем TabBar есть два одинаковых элемента, это один и тот же список, только с другим типом элемента.То, что я сделал, но выглядит странно для меня, это установление различных «тегов» для каждого UITableView и в viewDidLoad, а затем назначьте правильный тип в соответствии с тегом.* Есть ли лучший способ сделать это?Я не создаю свой UITabBar в коде, поэтому мой AppDelegate довольно пуст!Тип, который я установил, является просто атрибутом в одном из моих основных объектов данных, в списке, в котором у меня есть заимствованные объекты, а в другом - у меня есть одолженные элементы, но это один и тот же объект.

Ответы [ 2 ]

3 голосов
/ 20 января 2012

Вы можете представить тип как свойство в вашем общем контроллере представления и установить его, когда выбран соответствующий элемент панели вкладок (tabBarController:didSelectViewController: из протокола UITabBarControllerDelegate - ваш делегат приложения будет делегатом контроллера панели вкладок).

Вы бы настроили это следующим образом.Объявите, что ваш делегат приложения соответствует протоколу UITabBarControllerDelegate, затем установите его в качестве делегата контроллера панели вкладок (вы должны сделать это в коде, поскольку делегат приложения недоступен для подключения в раскадровке).В вашем applicationDidFinishLaunching добавьте следующее перед возвратом YES:

UITabBarController *tbc = (UITabBarController*)self.window.rootViewController;
tbc.delegate = self;

Затем реализуйте следующий метод делегата:

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

    switch (tabBarController.tabBar.selectedItem.tag)
    {
        case 1:
            viewController.property = @"propertyA";
            break;
        case 2:
            viewController.property = @"propertyB";
            break;
    }

    NSLog(@"view controller is %@",viewController);

}

Вам нужно будет привести переменную viewController к вашему фактическому представлениюкласс контроллера, а также назначьте соответствующие теги элементу панели вкладок каждого контроллера представления.

1 голос
/ 20 января 2012

То, что у вас там, должно работать нормально.Другим вариантом может быть наличие общего суперкласса UIViewController, который имеет все функциональные возможности, а затем создание подкласса этого базового класса и предоставление реализации viewDidLoad, которая устанавливает соответствующий тип.Затем в Интерфейсном Разработчике вы можете установить контроллеры представления UITabBar в качестве подходящих подтипов.

Результат будет таким же, но в IB может быть немного яснее, что происходит, потому что вам не нужно полагаться на запоминание значения каждого числового тега.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...