从当前视图和推送视图处理后退按钮

Back button handling from a view in both present and push

我有一个 UIViewControllerC,它是从另外两个 UIViewcontroller 调用的

ViewControllerA ViewControllerB

从 ViewControllerA 转到 UIViewControllerC 我必须让它成为 presentviewcontroller

 UIViewControllerC *vc = [self.storyboard instantiateViewControllerWithIdentifier:@"UIViewControllerC"];
    [vc setModalTransitionStyle:UIModalTransitionStyleCrossDissolve];
    vc.tagfrom=@"present";
    [self presentViewController:vc animated:NO completion:nil];

从 ViewControllerB 转到 UIViewControllerC 我必须让它推送视图

UIViewControllerC *vc = [self.storyboard instantiateViewControllerWithIdentifier:@"UIViewControllerC"];
        [vc setModalTransitionStyle:UIModalTransitionStyleCrossDissolve];
        vc.tagfrom=@"push";
        [self.navigationController pushViewController:vc animated:YES];

现在我必须从后退按钮的两个视图中返回,我检查 tagfrom 条件并处理它

-(IBAction)backBtn:(id)sender
{
 if ([tagfrom isEqualToString:@"present"])
  {
    [self dismissViewControllerAnimated:NO completion:nil];
}
else
{
[self.navigationController popViewControllerAnimated:YES];
}

} 

两个senerio都可以正常工作,但有时我的推送视图表现得像presentmodelveiw,并且没有过渡效果,请帮助我解决它

首先,您的 UIViewController 子类不需要 tagfrom 属性。

A UIViewController 实例有一个名为 presentingViewController 的 属性,它将让您了解 viewController(在您的案例中为 A ) 表示电流 viewControllerC 在你的情况下 )。

-(IBAction)backBtn:(id)sender
{
   if (nil != self.presentingViewController) {
      [self dismissViewControllerAnimated:NO completion:nil];
   }
   else {
      [self.navigationController popViewControllerAnimated:YES];
   }
} 

其次,modalTransitionStyle 应该与 一起工作 presentationNOT push / pop过渡。如果您将此与 push / pop 一起使用,则行为未定义,因为它不打算在那里使用。