2010-09-26 47 views
7

我想在用戶拍攝照片或選擇保存的照片後添加確認視圖。確認視圖將顯示所選圖像,並在工具欄中顯示取消和上傳按鈕。從UIImagePickerController呈現另一個模式視圖

我的UIImagePickerController是由我的一個視圖控制器以模態方式呈現的,控制器由導航控制器控制,而導航控制器又由標籤欄控制器控制。

如何以模態顯示我的確認視圖,以便在用戶選擇照片時佔用全屏幕(如圖像選擇器視圖)?理想情況下,我想要這樣的東西:

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info { 
    [picker dismissModalViewControllerAnimated:YES]; 
    UIViewController *modal = [[UIViewController alloc] init]; 
    modal.view = confirmationView; 
    [self presentModalViewController:modal animated:YES]; 
    [modal release]; 
} 

但是,崩潰的應用程序。我應該從PICKER中以模態形式呈現確認視圖嗎?如果是這樣,我如何確保在確認視圖被解除時,選取器也不會顯示?

編輯:

修正了我發佈的代碼的bug。這就是當我嘗試從內存中鍵入而不是複製+粘貼:(反正,迄今爲止的建議沒有幫助

如果我提出模式控制器然後解僱選擇器,沒有任何反應,可能是因爲兩個控制器。隨後駁回

如果我解僱選擇器現今的模態控制器,我得到的模態轉換的異常:

*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Attempting to begin a modal transition from <UINavigationController: 0x6b33940> to <UIViewController: 0x6b62b00> while a transition is already in progress. Wait for viewDidAppear/viewDidDisappear to know the current transition has completed' 

回答

0

呈現之前你釋放模式試試這個:

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info { 
    UIViewController *modal = [[UIViewController alloc] init]; 
    modal.view = confirmationView; 
    [self presentModalViewController:modal animated:YES]; 
    [modal release]; 
    [picker dismissModalViewControllerAnimated:YES]; 
} 
+0

我想你還需要在呈現新模態視圖之前關閉拾取器。 – 2010-09-27 01:33:45

+0

這些建議都無幫助。該版本只是我輸入的代碼中的一個錯誤,但它不在原始代碼中。在呈現模態視圖之前關閉選取器會導致異常。查看我的編輯。 – pmc255 2010-09-27 06:03:27

0

啊。看起來你不能用相同的方法呈現和解除模態視圖控制器。

您可以使用一個屬性(以幫助內存管理)來存儲信息字典,以及一個ivar來存儲諸如「didSelectImage」之類的東西。然後在視圖控制器的viewDidAppear中,如果didSelectImage == YES,則使用info字典中的詳細信息以模態方式呈現您的視圖控制器。

確保將didSelectImage重置爲NO,並且一旦它們不再需要,將info dictionary屬性設置爲nil。

3

找到解決方案。事實上,挑選者需要被解僱,關鍵在於爲解僱而關閉動畫,以便立即發生,然後呈現第二個模態視圖。

編輯:其實,它讓我幾乎想要的東西。當您關閉選取器時,原始視圖會在瞬間顯示,然後模態視圖會變成動畫。這看起來有點時髦。

我也試着保持選擇器周圍,而不是解僱它。相反,我打電話[picker presentModalViewController:modal animated:YES]。這使我可以順利地從選取器轉換到確認視圖。但是,當我完成確認視圖時,我需要從原始控制器調用[self dismissModalViewControllerAnimated:YES]。這會在解散所有內容之前首先顯示圖像選擇器。再次,不是我想要的。

理想情況下,我希望Facebook iPhone應用用於上傳照片的效果相同。一旦你選擇了一張照片,它將無縫轉換到確認視圖。從該視圖中取消或確認將平滑過渡回原始主視圖。它使得它看起來像確認視圖是圖像選擇器的一部分,當它可能只是另一個自定義視圖。

我該怎麼做?

1

嘗試......

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info { 
    UIViewController *modal = [[UIViewController alloc] init]; 
    modal.view = confirmationView; 
    picker.navigationController pushViewController:modal animated:YES]; 
    [modal release]; 
} 
0

這爲我工作:

[myViewControllerA presentModalViewController:myViewControllerB]; 
//... let myViewControllerB do its job 
[myViewControllerB presentModalViewController:myViewControllerC]; 
//... let myViewControllerC do its job 
[myViewControllerA dismissModalViewControllerAnimated:YES]; 

也就是說,你現在的這個樣子A => B(modal) => C(modal)的視圖控制器,然後調用從視圖控制器A駁回爲了錯過B和C一次。

相關問題