Перемещайтесь между представлениями, встроенными в NavigationController, используя кнопки в раскадровке - PullRequest
0 голосов
/ 10 февраля 2012

Мое приложение запускается с видом с некоторыми кнопками. Я хочу перейти к различным представлениям в зависимости от нажатой кнопки и передать им разные параметры.

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

enter image description here .

Как видите, нажатие кнопки в главном представлении вызывает представление таблицы, встроенное в контроллер навигации. И это вызывает у меня много проблем!

Сначала я не знаю, выбрал ли я правильный подход, или я должен запустить свое приложение с контроллером навигации вместо представления (я пробовал это решение, но на своей домашней странице я не хочу навигационную панель, а также делает ее видимой или нет, визуально не очень приятно).

Если вы подтвердите осуществимость моего первоначального подхода, как я могу перейти к нужному виду, также передавая некоторые параметры?

------ Изменить:

Я наконец нашел рабочее решение. Контроллер навигации является первым контроллером в моем приложении. Представления связаны со стандартным переходом.

На моем домашнем виде:

- (void)viewWillAppear:(BOOL)animated
{
    [[self navigationController] setNavigationBarHidden:YES animated:YES];
}

В моем табличном представлении:

- (void)viewWillAppear:(BOOL)animated
{
    [[self navigationController] setNavigationBarHidden:NO animated:YES];
}

Таким образом, когда вы нажимаете кнопку, новый вид отображается с анимацией, которая аналогична панели навигации. И то же самое происходит, когда вы нажимаете кнопку «Назад» в представлении таблицы.

Больше не нужно никаких строк кода !!!

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

Яс

1 Ответ

1 голос
/ 10 февраля 2012

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

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

Раскадровки - HomeViewController - YourTableViewController

Если вы хотите скрыть панель навигации на домашней странице, вам просто нужно скрыть/ показать его из кода, используя:

[self.navigationController setNavigationBarHidden:YES animated:NO];

, а когда вы хотите показать это в контроллере вида, используйте:

[self.navigationController setNavigationBarHidden:NO animated:NO];

Эти строки кода должны идти к методам, связанным с отображениемпредставление, т.е. viewDidAppear: или к prepareForSegue: метод

РЕДАКТИРОВАТЬ: я также добавил в свое приложение некоторую задержку при нажатии следующего контроллера представления:

[self.navigationController setNavigationBarHidden:NO animated:YES];

    // Showing navigation bar animation
    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 0.2 * NSEC_PER_SEC), dispatch_get_current_queue(), ^{
        [self.navigationController pushViewController:viewController animated:YES];         
    });
...