Отображение одноразового UIViewController через PresentModalViewController при запуске

StackOverflow https://stackoverflow.com/questions/1638739

Вопрос

Привет!У меня есть работающее приложение для iPhone (ура!), которое использует MainView.xib содержащий полностью укомплектованный UITabBar с несколькими УИНавигационконтроллер объекты и виды уже готовы.

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

Часть регистрации и брелка у меня под контролем(спасибо Эрике Садун за последнее!), но показать, что первоначальное однократное представление оказалось сложнее, чем я ожидал.

Подозреваю, что я слишком близок к проблеме, чтобы понять, что не так.Я очень надеюсь, что это ошибка пилота и ничего не требует Руба Голдберга!

Вот сценарий:

Приложение запускается при загрузке MainView.xib, в чем и заключается вышеупомянутое UITabBar контроллер и др.ал.В качестве аргумента предположим, что мы должны показать это представление регистрации.Кроме того, нам бы хотелось, чтобы он имел модальный вид, чтобы он влетал снизу вверх.Затем, когда мы закончим, мы можем отклонить его, вызвать делегата (скорее всего, делегата приложения) и попросить его продолжить исходную работу. 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 завершен (и у нас есть делегат, который поможет нам знать, когда это произойдет).

Почему я вообще беспокоюсь о панели вкладок?Ну, похоже, мне нужно что-нибудь чтобы повесить шляпу этого модального ВК, и я не знаю, что еще можно использовать.

Это единственный способ?Просто вроде привязывает без надобности Регистрацию ВК и Панель вкладок, и это просто пахнет...неправильный.

Подсказки приветствуются/оцениваются!

Это было полезно?

Решение

Трудно ответить на этот вопрос, не зная, что показывает ваш Default.png.Предполагая, что вы следите за HIG и отображаете пустой tabBarController, я бы предложил несколько сложное наложение слоев:вид снизу:tabbarcontroller.view Middle View:UIImageView:Default.png Вверху вид:вид регистрации расположен под нижней частью экрана

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

OTOH, если вы не следите за HIG и вместо этого показываете какую-то заставку, все становится немного проще.Слой такой:вид снизу:tabbarcontroller.view Top View:UIImageView:По умолчанию.png

Если вам нужно отобразить регистрацию, выполните PresentModalViewController с анимированным:NO, а затем закройте UIImageView.Если нет, просто закройте UIImageView.

Это длинное объяснение без картинок, надеюсь, оно имеет смысл.Важным моментом является то, что я предлагаю добавить UIImageView:Default.png, который будет первым, что будет видно при запуске приложения, и использовать его для управления переходом к регистрации или tabBarController, если это необходимо.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top