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];
而且它加載它就好了。這是好的還是這不推薦?看起來有點哈克!
其實我只是發現,如果我的相機代碼移動到它自己的方法,然後用這個稱呼它在viewDidLoad中: [自performSelector:@selector(openCamera)withObject:無afterDelay:0]; 然後它的工作!有更好的方法嗎?有人在awakenFromNib中提出了建議,但這並不奏效。 – 2012-02-24 18:57:43
我幾乎建議。它晚於'viewDidLoad',但早於'viewWillAppear'。但是'viewDidLoad'在語義上是錯誤的:您可以導致視圖加載而不會出現在屏幕上,並且如果您從不顯示其他控制器,則顯示相機沒有任何意義。當然,你可能不會這樣使用它。 'viewWillAppear'更準確:你知道它會出現。公平的警告是,將一個控制器置於另一個控制器之上會立即變得脆弱,即,在操作系統升級時存在問題。你對時間越不積極,就越穩定。 – smparkes 2012-02-24 19:04:25