UINavigationBar在presentViewController上消失:animated:completion

时间:2013-12-05 04:46:14

标签: ios iphone objective-c

在一周的大部分时间里,我一直在撞墙,试图弄清楚这个错误发生了什么,但我无法弄明白。我已经阅读了Apple开发人员的所有视图控制器文档,在这里查看了无数文章等。

我有3个视图控制器:一个基本视图控制器,一个图像编辑控制器(允许用户放大/平移图​​像,按下就可以了,将图像保存在边界内,通过图像将图像返回到基本视图委托方法,并将其推送到最后一个视图控制器),最后是一个BigPictureViewController,用户与他保存的图像进行交互。

在调用presentViewController:animated:从基本视图控制器完成时,导航栏会暂时显示,然后消失。我已经彻底毁掉了最终的视图控制器,所以它只显示一个与你第一次创建视图控制器时相同的空白屏幕,但导航栏仍然消失,所以我知道它不是视图控制器编码中的东西。

这是来自图像编辑控制器的代理(包含在基本视图控制器中):

#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];
    }
}

我试过从self.navigationController等呈现它,如果我使用

我可以坚持使用不同的导航控制器
UINavigationController *navCon = [[UINavigationController alloc] initWithRootViewController:bpvc];
[self.navigationController presentViewController:navCon animated:YES completion:nil];

但这似乎是一种极其愚蠢的方式,并没有真正解决问题,只是绕过它。

对不起文字的墙,但我宁愿彻底也不要让人们陷入黑暗。

TL;在presentViewController上的DR,导航栏弹出一瞬间然后消失〜

提前感谢任何帮助/提示!

2 个答案:

答案 0 :(得分: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];
    }
}

答案 1 :(得分:0)

试试这个

BigPictureViewController *bpvc = segue.destinationViewController;
bpvc.imageFromLibrary = theImage;
UINavigationController *navcont = [[UINavigationController alloc]  initWithRootViewController:bpvc];
[self presentModalViewController:navcont animated:YES];