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

Posted

技术标签:

【中文标题】如何关闭相机并导航到根视图控制器?【英文标题】:How to dismiss camera and navigating to the root view controller? 【发布时间】:2012-04-03 06:04:05 【问题描述】:

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

库存视图中的捕获按钮

   -(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;
   

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

谢谢。

【问题讨论】:

用一些代码编辑你的问题 你是否使用模态视图来显示相机? 请提供崩溃日志。发布崩溃日志。 @komal 如何在推送视图后推送该视图检查您释放该视图控制器... 【参考方案1】:

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

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

已编辑

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

把你的代码写在viewDidAppearlike

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

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

【讨论】:

wait_fences:收不到回复:10004003 @komalmehta:这是什么?崩溃日志??【参考方案2】:

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

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

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

PS 注意:查找 controllerWhichContainsPicker 是另一回事,这取决于您创建的视图层次结构,基于您需要先关闭它,稍后您需要执行其他操作,例如导航和其他视图操作。

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

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

【讨论】:

以上是关于如何关闭相机并导航到根视图控制器?的主要内容,如果未能解决你的问题,请参考以下文章

如何关闭视图控制器并快速弹出到根视图控制器?

在导航控制器中弹出到根视图

StoryBoard 导航到根视图控制器

从 Popover 关闭或弹出到根视图控制器

无法导航到根视图控制器

如何在弹出到根视图 Swift 后立即更改选项卡?