2012-02-24 74 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

相關問題