Я искал довольно долго для решения моей проблемы, но большинство из них были бесполезны в моем случае, так как почти все они были о ошибках, сделанных в IB, которые я не использую в этом проекте. К моменту:presentViewController делает черный экран
У меня есть проект XCode, сгенерированный с помощью Unity, и я хотел добавить в него еще один контроллер представления с UIWebView в нем поверх UnityViewController. Поскольку Unity генерирует проект, который не использует UINavigationController, я не мог использовать pushViewController и решил использовать presentViewController: ... вместо этого. Проблема в том, что когда я пытаюсь это сделать, я вижу только черный экран. Если я вызываю функцию rejectViewController, я снова вижу UnityViewController, так что это нормально. Проблема в том, что это похоже на то, что presentViewController не добавляет мой взгляд на vc. Я использовал точки останова, чтобы увидеть, вызывает ли viewDidLoad, а это не так. То же самое касается - (void) viewView и - (UIView *). Вот код, который я использую, чтобы добавить свой виртуальный канал:
WebViewController *webViewController = [[WebViewController alloc] init];
[[[[UIApplication sharedApplication] keyWindow] rootViewController] presentModalViewController:webViewController animated:YES];
Я проверил, если webViewController равен нулю, и это не так. Этот rootViewController является UnityViewController, я на 100% уверен в этом.
Это Единство сгенерированный код, который создает иерархию вида:
_mainDisplay = [[DisplayManager Instance] mainDisplay];
[_mainDisplay->window makeKeyAndVisible];
static bool _ClassInited = false;
if(!_ClassInited)
{
AddOrientationSupportDefaultImpl([UnityViewController class]);
_ClassInited = true;
}
_viewController = [[UnityViewController alloc] init];
_viewController.wantsFullScreenLayout = TRUE;
_viewController.view = _mainDisplay->view;
и позже в другом методе:
[_mainDisplay->window addSubview: _mainDisplay->view];
_mainDisplay->window.rootViewController = _viewController;
[_mainDisplay->window bringSubviewToFront: _mainDisplay->view];
Может черный экран будет вызвано отсутствием UINavigationController?
Это, вероятно, не имеет отношения к моей проблеме, но у меня также есть меню, которое нужно постоянно видеть в приложении, и я сделал его подвид KeyWindow.
P.S. Я также попробовал представить контроллер UINavigation с webViewController, установленным как rootvc, но все, что я получил, было черным экраном с навигационной панелью.
P.S.S. Я использую Vuforia в проекте Unity, и поэтому я не могу запустить его в симуляторе.
Edit:
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view.
self.view.backgroundColor = [UIColor whiteColor];
UIImageView *icon = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"Icon.png"]];
icon.frame = CGRectMake(50, 50, 200, 200);
[self.view addSubview:icon];
}
Breakpoint находится на линии, где я изменить BackgroundColor. Он не называется.
Редактировать 2: С точками останова я выяснил, что не вызваны методы моего подкласса WebViewController, даже init. Это похоже на то, что xcode игнорирует существование этого класса. Я только редактировал метод viewDidLoad, а остальное как в шаблоне подкласса UIViewController по умолчанию. Никаких изменений в WebViewController.h тоже нет.
Редактировать3: Исправлено. Изменение имени класса WebViewController для другого помогло. Единственное логическое объяснение, о котором я могу думать, это то, что WebViewController уже был реализован раньше в одном из исходных файлов, но я не делал этого сам. Возможно, в одной из библиотек (?). В любом случае, спасибо за помощь, я принимаю ответ GuillaumeA, так как благодаря его предложениям я узнал, что на самом деле это не проблема представления.
Я пробовал как presentViewController, так и presentModalViewController, но результаты были одинаковыми. Но спасибо, изменив фон, прежде чем presentViewController сделал работу. Теперь я вижу красный экран вместо черного. – johnyu
Это обычное поведение, которое 'presentModalViewController' и' presentViewController' делают то же самое, но первый устарел, поэтому вы должны использовать его позже. Да за красный экран :)! Не могли бы вы принять мой ответ, если вы чувствуете, что ваша проблема решена, пожалуйста? –
Он все еще не разрешил мою проблему, так как viewDidLoad все еще не вызывается. – johnyu