Ios 如何从显示的视图控制器打开UIImagePickerController?

Ios 如何从显示的视图控制器打开UIImagePickerController?,ios,Ios,问题底部更新 以下是我想要做的: 主ViewController打开一个新的ViewController(我不想要导航栏,所以我必须这样做吗?),然后打开相机 在主视图控制器中,我通过按下按钮来调用: CameraProcessViewController *controller = [[CameraProcessViewController alloc] initWithNibName:@"CameraProcessViewController" bundle:nil]; [self pre

问题底部更新

以下是我想要做的:

主ViewController打开一个新的ViewController(我不想要导航栏,所以我必须这样做吗?),然后打开相机

在主视图控制器中,我通过按下按钮来调用:

CameraProcessViewController *controller = [[CameraProcessViewController alloc] initWithNibName:@"CameraProcessViewController" bundle:nil];

[self presentModalViewController:controller animated:NO];
这将打开下一个控制器。在viewDidLoad方法中的下一个控制器中,我有:

if([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) {

    UIImagePickerController *imagePicker = [[UIImagePickerController alloc] init];

    [imagePicker setSourceType:UIImagePickerControllerSourceTypeCamera];
    [imagePicker setDelegate: self];
    [imagePicker setAllowsEditing:NO];

    [self presentModalViewController:imagePicker animated:YES];

    NSLog(@"Has camera");
} else {
    NSLog(@"Has no camera");
}
我尝试了presentModalViewController和presentViewController,以及主视图控制器和子视图控制器之间的每种组合,但是相机从未打开。当我将相机代码移动到主视图控制器中时,它会正常打开

我看了又看,我找不到任何东西说明为什么会这样

谢谢

更新 我发现在viewDidLoad方法中,我可以调用:

[self performSelector:@selector(openCamera) withObject:nil afterDelay:0];

它可以很好地装载它。这样可以吗?还是不建议这样做?看起来有点不对劲

viewDidLoad
不是执行此操作的正确位置。您可以尝试
视图将出现
,但这可能也太早了。否则,
viewdide出现

实际上,我刚刚发现,如果我将相机代码移动到它自己的方法,然后在viewdideload中调用它,并使用以下命令:[自执行选择器:@selector(openCamera)with object:nil afterDelay:0];那就行了!有更好的方法吗?有人在Reawerfromnib中提出了建议,但没有用。我差点就提出了。它晚于
viewdiload
,但早于
viewdiload
。但是
viewdiload
在语义上是错误的:您可以在视图从未出现在屏幕上的情况下加载视图,并且如果您从未显示其他控制器,则显示摄影机是没有意义的。当然,您可能不会这样使用它<代码>视图将出现更正确:您知道它将出现。公平的警告是,将一个控制器置于另一个控制器之上往往很脆弱,即操作系统升级有问题。你对时机的把握越不积极,它就越稳定。