2013-06-05 4 views
2

Я искал довольно долго для решения моей проблемы, но большинство из них были бесполезны в моем случае, так как почти все они были о ошибках, сделанных в 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, так как благодаря его предложениям я узнал, что на самом деле это не проблема представления.

ответ

8

Это трудно понять, где ваша проблема связана с использованием информации вы предоставили.

Это может быть нормальное поведение. При создании нового экземпляра UIViewController (я предполагаю, что ваш WebViewController является подклассом), он создает пустой корень UIView для него.

Под «пустым» Я имею в виду, что в представлении нет подсмотра, но также нет цвета фона (nil). Это делает вид черным и, по некоторым причинам, предотвращает ожидание отображения при отображении.

Чтобы проверить, если мое предположение верно, попробуйте изменить цвет фона WebViewController зрения:

WebViewController *webViewController = [[WebViewController alloc] init]; 
webViewController.view.backgroundColor = [UIColor redColor]; 
[[[[UIApplication sharedApplication] keyWindow] rootViewController] presentModalViewController:webViewController animated:YES]; 

Примечание: presentModalViewController:animated: теперь осуждается в прошивкой 6.0, так что вы можете заменить его presentViewController:animated:completion::

[[[[UIApplication sharedApplication] keyWindow] rootViewController] presentViewController:webViewController animated:YES completion:nil]; 
+0

Я пробовал как presentViewController, так и presentModalViewController, но результаты были одинаковыми. Но спасибо, изменив фон, прежде чем presentViewController сделал работу. Теперь я вижу красный экран вместо черного. – johnyu

+0

Это обычное поведение, которое 'presentModalViewController' и' presentViewController' делают то же самое, но первый устарел, поэтому вы должны использовать его позже. Да за красный экран :)! Не могли бы вы принять мой ответ, если вы чувствуете, что ваша проблема решена, пожалуйста? –

+0

Он все еще не разрешил мою проблему, так как viewDidLoad все еще не вызывается. – johnyu

0

Попытка инициализировать как этот

WebViewController *webViewController=[[WebViewController alloc]initWithNibName:@"WebViewController" bundle:[NSBundle mainBundle]]; 

Примечание: предполагается, ваш СИБ файл, имеющий имя: WebViewController.xib

+0

Я не использую Interface Builder в этом приложении, у меня нет файлов .xib. Я создаю свой gui только с кодом. – johnyu