如何关闭相机并导航到根视图控制器?

时间:2012-04-03 06:04:05

标签: iphone ios ipad

我创建了3个视图。 第一个视图是家,第二个是库存,第三个是叠加视图。 现在从主屏幕使用pushviewcontroller,我正在导航到清单视图屏幕。 在库存视图中,我有一个捕获按钮。捕获按钮将在overlayview上打开相机。 现在的问题是在overlayview中有一个叫做后退按钮的按钮,当我点击这个按钮时我想要导航到主屏幕,但为此我需要先关闭相机。这怎么可能?

清单视图中的捕获按钮

   -(IBAction) btnCapture:(id) sender
   {
     @try 
     {
          [self showImagePicker:UIImagePickerControllerSourceTypeCamera]; 
     }
      @catch (NSException *exception) 
      {
         UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"No Camera" message:@"Camera is not available  " delegate:self cancelButtonTitle:@"Ok" otherButtonTitles:nil];
         [alert show];
         [alert release];
      }
}

在OverlayView后退按钮事件:

    -(IBAction)btnBack:(id)sender
     {
          app.navcntr=1;
          [self.delegate didFinishWithCamera];
          [self dismissModalViewControllerAnimated:YES];
      }

并在清单视图中查看viewWillAppear

   -(void) viewWillAppear:(BOOL)animated
    {
          if(app.navcntr ==1)
          {
                [self.navigationController popToRootViewControllerAnimated:YES];
          }
           app.navcntr=0;
   }

问题是它正在导航到主屏幕但是应用程序崩溃了。 怎么解决?

感谢。 enter image description here

2 个答案:

答案 0 :(得分:2)

我认为您试图两次关闭相机视图。我的意思是didFinishWithCamera方法会解雇它。删除第[self dismissModalViewControllerAnimated:YES];

-(IBAction)btnBack:(id)sender
     {
          app.navcntr=1;
          [self.delegate didFinishWithCamera];              
     }

<强> EDITED

当您不在屏幕上时(“将出现”),您不应该执行动画。

将您的代码写在viewDidAppear

-(void) viewDidAppear:(BOOL)animated
    {
          [super viewDidAppear:animated];

          if(app.navcntr ==1)
          {
                [self.navigationController popToRootViewControllerAnimated:YES];
          }
           app.navcntr=0;
   }

答案 1 :(得分:0)

您需要从拥有UIImagePickerController的控制器中解除模态视图控制器。

-(IBAction)whilePoppingBack:(id)sender{
    [controllerWhichContainsPicker dismissModalViewControllerAnimated:YES];
}

//完成后,您可以通过popToRootViewController方法愉快地导航到主视图控制器。

PS注意:找到controllerWhichContainsPicker是另一回事,这取决于你基于你需要首先解雇它的视图层次结构,你需要做其他事情,如导航和其他视图事物。

//另一件事是我怀疑是一些内存泄漏(正如你在这里提到的: wait_fences:未能收到回复:10004003 )。尝试运行仪器工具或NSZombie或NSMallocGaurd启用并尝试找出泄漏的位置,如果上面的代码似乎没有解决问题。

如果你能够摆脱它,请告诉我!