【问题标题】:Generic way of Popping & Dismissing View Controllers弹出和关闭视图控制器的通用方法
【发布时间】:2014-04-08 13:55:14
【问题描述】:

我正在构建一个应用程序,其中有 3 个 ViewController。 我还创建了自定义导航控制器。

  1. A-ViewController -> 这包含 2 个按钮,第一个按钮用于打开 B-ViewController,第二个按钮用于 C-ViewController。 从第一个按钮开始,我将 pushviewcontroller 用于 B-ViewController,这意味着 B-ViewController 是从 A-ViewController 推送的。

从第二个按钮 C-ViewController 使用 presentviewcontroller 呈现。

现在在 B 和 C ViewControllers 中按下返回按钮时,我必须在 B-ViewController 中使用弹出视图控制器并在 C-ViewController 中关闭。

目前我知道这些页面,但应该有一个通用的解决方案。 有什么方法可以识别当前导航控制器是被推送还是被弹出。

因为有些页面可以推送或呈现,但我不想设置任何布尔变量。我需要苹果的支持。

NSArray *arrViewControllers = [[AppDelegate sharedInstance].navigationController   viewControllers];
NSLog(@"[arrViewControllers count] = %d",[arrViewControllers count]);

我正在使用上面的代码来获取堆栈中的视图控制器列表。 但我无法确定它是被推送还是呈现。 有人可以帮我吗?

【问题讨论】:

    标签: ios iphone objective-c cocoa-touch uiviewcontroller


    【解决方案1】:

    您可以检查您的视图控制器是否存在于导航视图控制器的堆栈中。只需将其检查为

    if([self.navigationController topViewController] == self){
       //VC is the top most view controller
         [self.navigationController popViewControllerAnimated:YES];
    }else{
       //You can put some checks here to be dead sure its a modally presented view controller
        [self dismissViewControllerAnimated:YES completion:nil];   
    }
    

    【讨论】:

    • 不,实际上我正在使用 B 视图控制器来推送和呈现。那么我如何识别导航控制器是被推送或呈现的。这样我就可以编写一个弹出和关闭它的代码。
    【解决方案2】:

    这是从前一个控制器呈现或推送的查找导航控制器的代码。

    NSArray *arrViewControllers = [[AppDelegate sharedInstance].navigationController viewControllers];
    UIViewController *viewController = [arrViewControllers lastObject];
    if (viewController.presentedViewController) 
    {
        [self dismissViewControllerAnimated:YES completion:nil];
    }
    else{
        [self.navigationController popViewControllerAnimated:YES];
    }
    

    【讨论】:

    • if (self.isBeingDismissed) { NSLog(@"present"); } 其他 { NSLog(@"pop"); }
    猜你喜欢
    • 2014-08-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多