在一周的大部分时间里,我一直在撞墙,试图弄清楚这个错误发生了什么,但我无法弄明白。我已经阅读了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,导航栏弹出一瞬间然后消失〜
提前感谢任何帮助/提示!
答案 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];