UINavigationBar получает кнопки из другого вида - PullRequest
0 голосов
/ 19 марта 2010

У меня есть три вида: всплеск, логин и список.

Из Splash я просто жду, а затем Push View View, со скрытой панелью навигации.

В логине я показываю панель навигации, скрываю BackButton1 и добавляю новую RightButton1, затем проверяю, установлены ли в файле Settings.bundle «login» и «pass». Если это так, я нажимаю список. В противном случае я останусь в режиме входа в систему, ожидая, пока пользователь заполнит форму и нажму кнопку.

В виде списка я добавляю новый RightButton2 и новый BackButton2.

Проблема заключается в том, что если данные Settings.bundle не равны NULL, и в представлении входа в систему я быстро нажимаю «Просмотр списка», то в представлении «Список» появляется RightButton1, либо вообще не отображаются кнопки, либо не отображается только BackButton2 ...

Самое странное в том, что все было в порядке, и вдруг стало грязно.

Вход в систему:

    // Making the Navigation Bar Visible
 [self.navigationController setNavigationBarHidden:NO animated:NO];

  // Hiding the Back Button in THIS view (Login)
  [self.navigationItem setHidesBackButton:YES];

  // Inserting the Logout Button for the Next View (List)
  UIBarButtonItem *backButton = [[UIBarButtonItem alloc] 
            initWithTitle:@"Logout" 
            style:UIBarButtonItemStylePlain 
            target:nil 
            action:nil];
  self.navigationItem.backBarButtonItem = backButton;
  [backButton release];

  UIBarButtonItem* newAccountButton = [[UIBarButtonItem alloc] 
            initWithTitle:@"New Account" 
            style:UIBarButtonItemStylePlain 
            target:self 
            action:@selector(newAccountButtonPressed)];  
  self.navigationItem.rightBarButtonItem = newAccountButton;
  [newAccountButton release];

Список

     // Making the Navigation Bar Visible
 [self.navigationController setNavigationBarHidden:NO animated:NO];

 UIBarButtonItem* aboutButton = [[UIBarButtonItem alloc] 
         initWithTitle:@"About" 
         style:UIBarButtonItemStylePlain 
         target:self 
         action:@selector(aboutButtonPressed)];  


 self.navigationItem.rightBarButtonItem = aboutButton;
 [aboutButton release];

Есть идеи?

ОБНОВЛЕНИЕ: Я проверил больше, и мне кажется, что когда я быстро перехожу из Login в List, NavigationBar не хватает времени, чтобы добавить кнопки и добавить кнопки и панели в неправильный порядок. Я использовал executeSelector, чтобы заставить представление Login ждать до тех пор, пока не будет нажата List, и если задержка равна 2secs, все идет хорошо, но если она равна 0.1secs, проблема появляется снова.

Я использую viewDidLoad .. Как сделать так, чтобы представление входа в систему только выдвигало представление списка после того, как все в его навигационной панели уже в порядке? Другими словами, как я могу заставить push ожидать всех предыдущих команд без задержки с фиксированным временем?

1 Ответ

0 голосов
/ 19 марта 2010

Одна вещь, которую стоит рассмотреть, - это сделать ваш экран-заставку контроллером модального представления, поскольку вам нужно проделать большую дополнительную работу, чтобы он не отображался в иерархии навигации. Просто используйте метод presentModalViewController:animated: вашего контроллера навигации.

Возможно, имеет смысл также сделать модальный вид входа в систему.

Еще лучше: используйте default.png в качестве заставки и откройте модальный контроллер вида для входа в систему. Это предполагает, что ваш заставка статична.

...