2014-03-06 76 views
0

我試圖做一些簡單:從圖像選擇器返回時如何更改視圖控制器?

  1. 從控制器MAViewControllerMenu我可以選擇一個現有的圖片
  2. 選擇後,我在返回到MAViewControllerMenu返回MAViewControllerMenu通過駁回選擇器視圖
  3. 權,我想切換到另一個控制器MAViewControllerPictureDisplay,我可以在其中查看在imageView中選擇的圖像。

但是,它不會把我帶到下一個視圖。

下面是MAViewControllerMenu代碼

MAViewControllerPictureDisplay* imageControllerView; 
- (void)viewDidLoad 
{ 

    [super viewDidLoad]; 
    // Do any additional setup after loading the view. 
    //load next page 
    imageControllerView = [[self storyboard]  instantiateViewControllerWithIdentifier:@"chosenImageController"]; 
} 



-(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info 
{ 
    image = [info objectForKey:UIImagePickerControllerOriginalImage];//Take image from picker 
    imageControllerView.image = image;//set it for the next controller's property 
    [self dismissViewControllerAnimated:YES completion:^{ 
    [self.presentingViewController presentModalViewController:imageControllerView 
                animated:YES]; 
}]; 
    //NEXT LINE DOESNT WORK 
    [self presentViewController:imageControllerView animated:YES completion:nil];//THAT DOESNT WORK 
} 

然而,我在我的第一個控制器中設置的按鈕時,在一個點擊運行該線之上通過函數如下,和一個不帶我去下一個控制器:

- (IBAction)movetonext{ 
    [self presentViewController:imageControllerView animated:YES completion:nil]; 
} 

我錯過了什麼?爲什麼在點擊按鈕時調用它,但在沒有觸摸事件的情況下調用時,在選擇圖片後不起作用?

感謝

回答

0

試試這個:

相反POPING的UIViewController,然後呈現。推兩個視圖控制器,並彈出一個。

當你調用選擇器:

[self presentViewController:imageControllerView animated:NO completion:nil]; 
    [self presentViewController:PickerController animated:YES completion:nil]; 

而且當您關閉:

[Picker dismissViewControllerAnimated:YES completion:NULL]; 

需要注意的是,當我調用兩個UIViewController中提出,爲他們贏得了(還沒有到呈現的一個)被設置爲「NO」的動畫。

希望這有助於

編輯

上面的代碼,只有UINaviationController作品,由 「PushViewController」 和 「PopViewController」。

實現這一點,我發現只有兩個方法是:

1 - 如果用戶NSNotificationCenter解僱你middel視圖,如下所示:

Dismiss 2 modal view controllers

不幸的是,你

,它不是相同的情況下,所以我想爲你使用UINaviationController 的方式,是使用UIImagePicker的子視圖,即解散他的自己..

2 - 知道這是一種黑客,但它的工作原理!如果你打電話來介紹middel UIViewController,沒有動畫,並從該視圖調用圖像選擇器,它將工作。並且您將不得不將選取的圖像進行委託。 我加入到我的代碼,爲middel的UIViewController有一個Alpha設置爲0的第一次,所以你不會注意到,他是韓元如何呈現:

//First UIViewController: 

@implementation ViewControllerOne 
- (IBAction)buttonPressed:(id)sender { 

    ViewControllerTwo *viewTwo = [[ViewControllerTwo alloc]init]; 
    [self presentViewController:viewTwo animated:NO completion:nil]; 
} 

//Secound UIViewController: 
     @interface ViewControllerTwo() 
     @property (nonatomic) UIImagePickerController *myPicker; 
     @end 
     @implementation ViewControllerTwo 

     -(void)viewWillAppear:(BOOL)animated 
     { 
     //View to alph 0 if this is the first time it displayis: 
     if (!self.myPicker) { 
     [self.view setAlpha:0]; 
     }else{ 
     [self.view setAlpha:1]; 
     } 
     } 
     -(void)viewDidAppear:(BOOL)animated{ 

     if (!self.myPicker) { 
     self.myPicker = [[UIImagePickerController alloc]init]; 
     self.myPicker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary; 
     self.myPicker.delegate = self; 
     [self presentViewController:self.myPicker animated:YES completion:nil]; 
     } 
     } 
     - (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo: (NSDictionary *)info 
     { 
    [self.myPicker dismissViewControllerAnimated:YES completion:nil]; 
     } 
     - (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker 
     { 
    [self.myPicker dismissViewControllerAnimated:YES completion:NO]; 
     } 
     - (IBAction)ButtonTwoClicked:(id)sender { 
     [self dismissViewControllerAnimated:YES completion:NO]; 
    } 
+0

它導致它崩潰與NSException –

+0

你是對的,我很抱歉,這隻適用於UINavigationController,只是自己檢查.. – MCMatan

3

利用completion處理程序:

-(void)imagePickerController:(UIImagePickerController *)picker 
            didFinishPickingMediaWithInfo:(NSDictionary *)info { 
[self dismissViewControllerAnimated:YES completion:^{ 
    image = [info valueForKey:UIImagePickerControllerOriginalImage]; 
    imageControllerView.image = image; 
    [self presentViewController:imageControllerView animated:YES completion:nil]; 
}]; 
} 

DEMO

present view

+0

我試過了。我不會工作。但是,我注意到我收到一條消息「警告:試圖在上呈現,其視圖不在窗口層次結構中!」 –

+0

更新我的代碼上面是我正在運行 –

+0

將您的代碼從'viewDidLoad'移動到'viewDidAppear:',我猜viewdidload沒有被調用 – meda

相關問題