2012-02-24 68 views
0

更新的问题如何从提供的视图控制器打开UIImagePickerController?

这里的底部就是我希望做的:

主视图控制器打开一个新的视图控制器(我不希望有一个导航栏,所以我必须要做到这一点modaly ?)然后打开相机。

在主视图控制器我有这种被称为上按下一个按钮:

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和两个主视图控制器和这个孩子一个之间的每个组合,而相机从来没有打开。当我将相机代码移到主视图控制器时,它会打开。

我看了看,看不清楚为什么会这样。

谢谢!

UPDATE 我发现,在viewDidLoad方法我可以调用这个:

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

而且它加载它就好了。这是好的还是这不推荐?看起来有点哈克!

回答

0

viewDidLoad是不正确的地方做到这一点。你可以尝试viewWillAppear,但那也可能为时过早。否则,viewDidAppear

+0

其实我只是发现,如果我的相机代码移动到它自己的方法,然后用这个称呼它在viewDidLoad中: [自performSelector:@selector(openCamera)withObject:无afterDelay:0]; 然后它的工作!有更好的方法吗?有人在awakenFromNib中提出了建议,但这并不奏效。 – 2012-02-24 18:57:43

+0

我几乎建议。它晚于'viewDidLoad',但早于'viewWillAppear'。但是'viewDidLoad'在语义上是错误的:您可以导致视图加载而不会出现在屏幕上,并且如果您从不显示其他控制器,则显示相机没有任何意义。当然,你可能不会这样使用它。 'viewWillAppear'更准确:你知道它会出现。公平的警告是,将一个控制器置于另一个控制器之上会立即变得脆弱,即,在操作系统升级时存在问题。你对时间越不积极,就越稳定。 – smparkes 2012-02-24 19:04:25

相关问题