iPhone: значение selectedIndex для вкладки должно быть согласованным, но не - PullRequest
2 голосов
/ 07 апреля 2010

Это должно быть так просто ... но что-то пошло не так.

Моя установка выглядит следующим образом:

MainViewController
   Tab Bar Controller
      4 tabs, each of which loads WebViewController

Мой AppDelegate содержит ivar, tabBarController, который подключен кконтроллер панели вкладок (все это было настроено в Интерфейсном Разработчике).Крайняя левая вкладка помечена как «выбранная» в IB.

В методе viewWillAppear в WebViewController мне нужно знать, какая вкладка была только что выбрана, чтобы я мог загрузить правильный URL.Я делаю это путем включения appDelegate.tabBarController.selectedIndex.

Когда приложение запускается впервые и выбирается крайняя левая вкладка, selectedIndex представляет собой большое значение мусора.После этого я получаю значения от 0 до 3, как и должно быть, но они находятся в случайном порядке.И не только это, но каждая вкладка, к которой я прикасаюсь, каждый раз показывает разные значения.

Это приложение чрезвычайно просто сейчас, и я не могу представить, что я мог бы сделать, чтобы все пошлоэто неправильно.

Кто-нибудь видел (и, надеюсь, решил) это поведение?

Обновление: у нас есть запрос на код.Здесь не на что смотреть.

Контроллер панели вкладок загружается в applicationDidFinishLaunching:

[self.mainViewController view];  //force nib to load
[self.window addSubview:self.mainViewController.tabBarController.view]

В настоящее время в MainViewController.m нет никакого кода, кроме как для синтеза и выпуска tabBarController.1023 *

От WebVewController.m:

- (void)viewWillAppear:(BOOL)_animation {
    [super viewWillAppear:_animation];

    NSURL *url;
    switch([S_UIDelegate mainViewController].tabBarController.selectedIndex) {
        case 0: url = [NSURL URLWithString:@"http://www.cnn.com"];
            break;
        case 1: url = [NSURL URLWithString:@"http://www.facebook.com"];
            break;
        case 2: url = [NSURL URLWithString:@"http://www.twitter.com"];
            break;
        case 3: url = [NSURL URLWithString:@"http://www.google.com"];
            break;
        default: url = [NSURL URLWithString:@"http://www.msnbc.com"];
    }

    NSURLRequest *request = [NSURLRequest requestWithURL:url];
    [webView loadRequest:request];
}

Здесь я вижу случайные значения.Кстати, S_UIDelegate - это просто макрос, который возвращает указатель на делегат приложения.Я использую чужой шаблон приложения, и он большой поклонник #define, чтобы сэкономить на наборе текста.

Ответы [ 2 ]

6 голосов
/ 08 апреля 2010

Сотрудник только что дал ответ.selectedIndex еще не настроен в viewWillAppear;когда я переключился на использование viewDidAppear, он работает как положено.

2 голосов
/ 07 апреля 2010

Вы должны попытаться переместить ваш регистр коммутатора в делегат tabBarController: - tabBarController: shouldSelectViewController: - tabBarController: didSelectViewController:

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