2013-12-05 3 views
1

Я бью головой о стену в течение большей части недели, пытаясь понять, что происходит с этой ошибкой, но я ничего не могу понять. Я прочитал все документы диспетчера представлений о материалах разработчика Apple, просмотрел бесчисленные статьи здесь и т. Д.UINavigationBar исчезает на presentViewController: анимированный: завершение

У меня есть 3 контроллера вида: контроллер базового представления, контроллер редактирования изображений (позволяет пользователю увеличивать масштаб в/панорамировать изображение и при нажатии «ОК» сохранить изображение в границах, вернуть изображение в базовый вид с помощью метода делегата и нажать его на последний контроллер представления) и, наконец, BigPictureViewController, где пользователь взаимодействует с изображением он спас.

При вызове presentViewController: анимированный: завершение с контроллера базового представления, панель навигации отображается в течение секунды секунды, а затем исчезает. Я полностью уничтожил конечный контроллер, так что он просто отображает пустой экран, идентичный тому, когда вы впервые создаете контроллер вида, но навигационная панель все еще исчезает, поэтому я знаю, что это не что-то в кодировке контроллера представления.

Вот делегат от контроллера редактирования изображений (содержащийся в контроллере базового вида):

#pragma mark - camera view delegate 
-(void)cameraView:(CameraViewController *)camView didReturnWithEditedImage:(UIImage *)image 
{ 
    theImage = image; 
    BPVCFlag = YES; 
    [self.navigationController popViewControllerAnimated:YES]; 
} 

Далее в методе viewWillAppear контроллера представления базового, я чек для флага для переключения SEGUE:

-(void)viewWillAppear:(BOOL)animated 
{ 
    [super viewWillAppear:animated]; 
    if (BPVCFlag) 
    { 
     BPVCFlag = NO; 
     BigPictureViewController *bpvc = [[BigPictureViewController alloc] init]; 
     UIStoryboardSegue *seg = [[UIStoryboardSegue alloc] initWithIdentifier:@"pushitrealgood" source:self destination:bpvc]; 
     [self prepareForSegue:seg sender:self]; 
    } 
} 

Наконец, метод prepareForSegue:

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
    NSString *id = [segue identifier]; 
    if ([id hasPrefix:@"pushit"]){ 
     BigPictureViewController *bpvc = segue.destinationViewController; 
     bpvc.imageFromLibrary = theImage; 
     [self presentViewController:bpvc animated:YES completion:nil]; 
    } 
} 

Я синтаксического дерева d представляя его от self.navigationController и т.д., и я могу заставить его придерживаться другого контроллера навигации, если я использую

UINavigationController *navCon = [[UINavigationController alloc] initWithRootViewController:bpvc]; 
[self.navigationController presentViewController:navCon animated:YES completion:nil]; 

но, похоже, очень Hacky способ сделать это, и на самом деле не решить проблему, просто обходит ее.

Извините за стену с текстом, но я предпочел бы быть более тщательным, чем оставлять людей в темноте.

TL; DR на presentViewController, навигационная панель всплывает на долю секунды, а затем исчезает ~

Заранее спасибо за любую помощь/советы!

+0

Вы представляя BigPictureViewController - это подкласс UINavigationController? – rdelmar

+0

self.navigationController - это только ссылка, является объектом контроллера init раньше? – PRu

ответ

1

Ваш "Hacky" решение на самом деле правильное решение. Когда вы вызываете presentViewController:animated:completion:, навигационный контроллер контроллера представления представлений больше не будет виден. Вы добавляете новый слой, так сказать.

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

Так что вы хотите:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { 
    NSString *id = [segue identifier]; 
    if ([id hasPrefix:@"pushit"]) { 
     BigPictureViewController *bpvc = segue.destinationViewController; 
     UINavigationController *navCon = [[UINavigationController alloc] initWithRootViewController:bpvc]; 
     bpvc.imageFromLibrary = theImage; 
     [self presentViewController:navCon animated:YES completion:nil]; 
    } 
} 
+0

Хорошо, спасибо вам большое!Это просто казалось странным способом обойти проблему, но если это правильный путь, я успокоился. Приветствие – user3003246

0

Попробуйте с этим

BigPictureViewController *bpvc = segue.destinationViewController; 
bpvc.imageFromLibrary = theImage; 
UINavigationController *navcont = [[UINavigationController alloc] initWithRootViewController:bpvc]; 
[self presentModalViewController:navcont animated:YES]; 
Смежные вопросы