Использование presentModalViewController для загрузки представления
-
06-07-2019 - |
Вопрос
Я пытаюсь загрузить временное скользящее представление из другого контроллера представления. Контроллеры представления моего приложения структурированы:
Application > Tab Bar Controller > TabBarItem > View Controller
В этом контроллере представления у меня есть кнопка, которая успешно запускает метод для загрузки временного представления:
- (IBAction)displayTimePickerViewForDayButton:(id)sender {
NSLog(@"displayTimePickerViewForDayButton method entered.");
// create the selector view controller and become the delegate
WOTimePickerViewController *tpvc = [[WOTimePickerViewController alloc] initWithNibName:@"WOTimePickerView" bundle:nil];
tpvc.delegate = self;
tpvc.modalTransitionStyle = UIModalTransitionStyleCoverVertical;
[self presentModalViewController:tpvc animated:YES];
[tpvc release];
}
Я убедился, что мой WOTimePickerViewController успешно возвращается из метода init, но представление никогда не входит в свой метод viewDidLoad. Р>
Итак, если я посмотрю на представление в IB, оно, похоже, связано с "представлением" виртуального канала ". имущество. Когда я запускаю представление в симуляторе (из IB), оно отображается правильно. Р>
Когда я запускаю приложение из XCODE, я могу перейти к представлению, нажать мою кнопку, и появляется пустой белый экран (обратите внимание, что это не белый фон представления, который должен загружаться). Р>
Решение
Вы должны сделать это так ..
WOTimePickerViewController *tpvc = [[WOTimePickerViewController alloc] initWithNibName:@"WOTimePickerView" bundle:nil];
tpvc.delegate = self;
UINavigationController *navCntrlr = [[UINavigationController alloc] initWithRootViewController:tpvc];
navCntrlr.modalTransitionStyle = UIModalTransitionStyleCoverVertical;
[self.navigationController presentModalViewController:tpvc animated:YES];
[tpvc release];
Но важная вещь, которую вам не хватает, это то, что вы делаете это неправильно.
вы должны сделать это следующим образом:
[self.navigationController presentModalViewController:tpvc animated:YES];
и когда вы хотите закрыть контроллер modalView, вы должны сделать это следующим образом:
[self.navigationController dismissModalViewControllerAnimated:YES];
Другие советы
Я думаю, что modalTransitionStyle контроллера представления применяется к модальным представлениям, показанным из этого контроллера представления. Поэтому, если вы хотите использовать переход UIModalTransitionStyleCoverVertical для отображения вашего модального контроллера, вы должны установить свойство modalTransitionStyle в родительском контроллере представления (self), а не в новом.
У меня нет опыта использования modalTransitionStyle, но, возможно, установка этого свойства перед загрузкой представления вызывает некоторые проблемы? Я бы попробовал это закомментировать ...
Похоже, что все настроено правильно в IB. Пока владелец вашего файла является контроллером представления, а его выход привязан к представлению, вы должны быть хорошими.
Надеюсь, это поможет,