Привет! У меня есть работающее приложение для iPhone (huzzah!), Которое использует MainView.xib
, содержащий полностью укомплектованный UITabBar с несколькими UINavigationController объектами и представлениями в готовом виде.
Теперь меня попросили добавить одноразовое представление регистрации к этому соединению. Это представление будет отображаться до UITabBar при запуске приложения, получать некоторую информацию от пользователя, регистрироваться на сервере - или проверять существующую регистрацию, а затем сжимать некоторые данные в Брелок. (Если цепочка для ключей уже показывает подтверждение регистрации, мы пропускаем показ этого конкретного представления.)
Часть регистрации и связки ключей у меня под контролем ( спасибо Эрике Садун за последнее! ), но показ того, что первоначальный одноразовый просмотр оказывается хитрее, чем я ожидал.
Я подозреваю, что слишком близко к проблеме, чтобы понять, в чем дело. Я действительно надеюсь, что это ошибка пилота и ничего не требует тоже Рубе Голдберг!
Вот сценарий:
Приложение запускается с загрузки MainView.xib , в котором находится вышеупомянутый контроллер UITabBar , et. и др. Ради аргумента, скажем, мы должны показать это представление регистрации. Кроме того, нам бы хотелось, чтобы он имел модальный вид, поэтому он будет летать снизу вверх. Затем, когда мы закончим, мы можем отклонить его, вызвать делегата (скорее всего, делегата приложения) и попросить его продолжить работу с оригинальным UITabBar .
// Normally, the Tab Bar Controller's view is added to the window ... still do this?
[window addSubview:tabBarController.view];
// We could now set up a VC like so. Mostly harmless. (I know, "mvc" is an unfortunate abbreviation in this case.)
RegistrationVC *mvc = [[RegistrationVC alloc] initWithNibName:@"RegistrationView" bundle:nil];
Обратите внимание, что RegistrationView.xib
имеет UIView внутри, но не имеет контроллера навигации. Мы хотим, чтобы он был отделен, чтобы его можно было использовать, скажем, как часть навигационного контроллера элемента панели вкладок (например, для просмотра вашей регистрационной информации).
Двигаемся дальше. Мы создаем навигационный контроллер с целью модального представления вещей:
UINavigationController *nc = [[UINavigationController alloc] initWithRootViewController:mvc];
Затем мы представляем наш модальный VC, используя контроллер панели вкладок в качестве основы, и высвобождаем выделенные биты.
[tabBarController presentModalViewController:nc animated:YES];
[nc release];
[mvc release];
Первое наблюдение. Что-то говорит мне, что это просто небрежно. Вы можете видеть навигационную панель и панель первого элемента панели вкладок, появляющиеся точно так же, как модальный вид. Более того, попытка установить для выбранного VC значение nil заранее не имеет никакого эффекта:
tabBarController.selectedViewController = nil;
Мы действительно не хотим / не должны использовать панель вкладок до после модального VC (и у нас есть делегат, который поможет сообщить нам, когда это произойдет).
Почему я вообще беспокоюсь о панели вкладок? Ну, похоже, мне нужно что-то , чтобы повесить шляпу этого модального ВК, и я не знаю, что еще можно использовать.
Это единственный способ? Просто кажется, что он без необходимости привязывает регистрационный VC и панель вкладок, и пахнет ... неправильно.
Подсказки приветствуются / приветствуются!