как установить UINavigationController со 2-го уровня вниз (не с уровня Delegate / RootController) - PullRequest
1 голос
/ 11 июля 2011

Каким будет код для использования UINavigationController в следующих обстоятельствах?

  • Базовое приложение основано на шаблоне XCode 4 «Приложение-утилита», имеет контроллер MainView & FlipSideView (т.е. MainView не использует UINavigationController, но модально открывает FlipSideview)
  • В обратном направлении у меня есть UITableView, который настроен для выполнения настроек конфигурации
  • Хотите иметь возможность щелкнуть одну строку этого FlipSideview UITableView, а затем, используя концепцию UINavigationController, затем перейти по горизонтали к программно сгенерированному UITableView, чтобы пользователь мог выбрать / изменить значение, а затем, по завершении, он мог нажать на КНОПКА НАЗАД в верхнем левом углу (которую поставляет UINavigationController)
  • По файлам XIB, в общем случае MainView и FlipSideView будут иметь файл XIB (из шаблона), но сгенерированное программным способом представление "select value" не будет иметь одного

Так что я не совсем уверен, где / как создать / удержать / использовать UINavigationController в этом случае? Как будет выглядеть код здесь, где будет храниться переменная UINavigationController, потребуется ли модифицировать FlipSideView XIB?

PS. Действительно ли FlipSideview придется изменить, чтобы включить панель навигации вверху? (тогда мне придется смоделировать кнопку DONE существующего шаблона с его навигационной панели на новую навигационную панель UINavigationController, я думаю)

PSS. Попытка этого, но выдает ошибку:

- (void)viewDidLoad
{
    [super viewDidLoad];
    self.uiNavController = [[UINavigationController alloc] initWithRootViewController:self];
    self.navigationController = self.uiNavController; 
    // ==> error: object cannot be set - either readonly property or no setter found
}

Ответы [ 2 ]

1 голос
/ 11 июля 2011

для этого ваш FlipSideViewController должен реализовывать UINavigationControllerDelegate.

Как показывает этот FlipSideView?

FlipSideViewController *flipSideView = [[FlipSideViewController alloc] init..];
[self presentModalViewController:flipSideView animated:YES];
[flipSodeView release]; 

Как это ????

Тогда у вас есть, чтобы изменить его на

FlipSideViewController *flipSideView = [[FlipSideViewController alloc] init..];
UINavigationController *uiNavController = [[UINavigationController alloc] initWithRootViewController:flipSideView];
[self presentModalViewController:uiNavController animated:YES];
[flipSideView release]; 
[uiNavController release];
1 голос
/ 11 июля 2011

Контроллеры UINavigation предназначены для того, чтобы быть контроллером ROOT-представления вашей иерархии.

Итак, в вашем примере у вас должен быть FlipSideViewController, содержащий UINavigationController со скрытой панелью навигации. Затем вы можете поместить ваш TableViewController в стек в качестве «корневого» представления.

Когда пользователь касается ячейки в вашем табличном представлении, вы можете создать новое представление и поместить его в стек self.navigationController. Убедитесь, что вы добавили код в метод viewWillAppear нового представления, чтобы отобразить панель навигации и код для представления ViewDidDisappear, чтобы снова скрыть панель навигации.

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