不要試圖直接從HelpViewController移動到UIImagePickerController,你需要通過你的mainViewController來到那裏。
讓我們把你的代碼放到一個方法......
- (void) presentImagePicker {
UIImagePickerController *mediaUI = [[UIImagePickerController alloc] init];
mediaUI.sourceType = UIImagePickerControllerSourceTypeSavedPhotosAlbum;
mediaUI.mediaTypes = [[NSArray alloc] initWithObjects: (NSString *) kUTTypeMovie, nil];
mediaUI.delegate = self;
[controller presentModalViewController: mediaUI animated: YES];
return YES;
}
(注意,因爲〜iOS5的是presentModalViewController:animated
是depracated,你真的應該用 [controller presentViewController:mediaUI animated:YES completion:nil];
更換)
讓我們把你的viewControllers mainVC
,helpVC
和imageVC
。有兩種方法可以實現這一點。
方法1 - performSelector
的快速和稍髒的解決方案是要做到這一點你helpVC的解僱按鈕方法:
- (IBAction)dismissHelpAndPresentImagePicker:(id)sender
{
UIViewController* mainVC = self.presentingViewController;
[mainVC dismissViewControllerAnimated:NO completion:
^{
if ([mainVC respondsToSelector:@selector(presentImagePicker)])
[mainVC performSelector:@selector(presentImagePicker)];
}];
}
這是輕度污染,因爲你需要確保presentImagePicker
在mainVC
實施 - 編譯器會給你任何警告,如果它不是。另外你正在運行它的對象後完成塊已被開除,所以沒有把握它去上班(在實踐中,確實如此,但仍...)
請注意,您有分配指針自.presentingViewController的本地變量(mainVC
)。這是因爲當helpVC
被解僱時,它的presentingViewController
屬性重置爲零,所以當你運行完成塊時,你不能使用它。但局部變量mainVC
仍然有效。
方法2 - 協議/委託
的清潔方式做到這一點是利用一個協議在helpVC聲明一個委託方法,使mainVC委託。通過這種方式,編譯器將跟蹤所有內容並警告您是否未正確實施。
下面是步驟做到這一點:
在helpVC.h添加@interface部高於該協議:
@protocol helpVCDelegate
- (void) dismissHelpAndPresentImagePicker;
@end
在helpVC。ħ接口部分聲明一個屬性爲其代表:
@property (nonatomic, weak) id <helpVCDelegate> delegate;
(該<helpVCDelegate>
告訴該委託預期符合協議的編譯器,因此它必須實現dismissHelpAndPresentImagePicker
)
在helpVC.m你的方法現在可以是這樣的:
- (IBAction)dismissHelpAndPresentImagePicker:(id)sender
{
[self.delegate dismissHelpAndPresentImagePicker];
}
在MainVC,當您創建HelpVC(在你的代碼 = SVC),設置MainVC因爲它的委託:
HelpViewController *svc = [storyboard instantiateViewControllerWithIdentifier:@"HelpViewController"];
svc.delegate = self;
[self presentViewController:svc animated:YES completion:nil];
而且一定要實現委託方法dismissHelpAndPresentImagePicker
- (void) dismissHelpAndPresentImagePicker
{
[self dismissViewControllerAnimated:NO completion:^{
[self presentImagePicker];
}];
}
我個人一直使用方法2,但我一個今天的解決方案早些時候提供了多達a similar question,並提問似乎認爲協議/代表過於複雜。也許我的回答就是這樣,我試圖在這裏簡化它。
我不知道它是否工作解僱和使用presentviewcontroller後。你可以加載模型視圖來幫助信息和一些動作按鈕,例如,你可以再次使用presentviewcontroller去下一個viewcontroller ......並且當你從這兩個視圖都不去任何實用工具時,只需要放棄視圖控制器...你也可以創建一個導航控制器.. – 2013-02-18 00:49:38