【问题标题】:For iOS, Any way to know the navigation source?对于 iOS,有什么方法可以知道导航源?
【发布时间】:2013-12-29 03:48:50
【问题描述】:

有什么办法知道导航来源?

例如,导航堆栈具有 A/B/C 三个视图控制器。 如果弹出C,当显示B时,有什么方法知道导航是从C到B吗?

非常感谢。

【问题讨论】:

    标签: ios uiviewcontroller uinavigationcontroller navigation


    【解决方案1】:

    另一种简单的方法

    首先在 Appdelegate.m 中声明 UINavigationController

     - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
    {
    
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    // Override point for customization after application launch.
    self.viewController = [[ViewController alloc] initWithNibName:@"ViewController" bundle:nil];
    UINavigationController *nav=[[UINavigationController alloc]initWithRootViewController:self.viewController];
    self.window.rootViewController = nav;
    [nav setNavigationBarHidden:YES];
    [self.window makeKeyAndVisible];
    return YES;
    } 
    

    之后在你的第一个视图 controller.m 中导入第二个视图控制器头文件

    #import "B.h"
    

    在您的按钮操作中

    - (IBAction)butvie:(id)sender {
    B*tab=[[Balloc]init];
    [self.navigationController pushViewController:tab
                                         animated:YES];
    }
    

    在 C 视图控制器中回到 B

    - (IBAction)butvie:(id)sender {
    
    [self.navigationController popViewController
                                         animated:YES];
    }
    

    【讨论】:

      【解决方案2】:

      您可以手动跟踪。您可以在 AppDelegate 类中保留一个全局变量,并在弹出特定 viewController 时设置该变量。

      在 cmets 之后更新: 在这种情况下,你可以使用 NSUserDefaults 或者你可以从 poppedViewController 发布一个 NSNotification 对象。虽然我不确定这些选项对您的使用效率如何。

      【讨论】:

      • 是的,这正是我现在使用的方式。虽然我们的团队不推荐使用全局变量或标志变量。
      • 在这种情况下,你可以使用 NSUserDefaults 或者你可以从 poppedViewController 发布一个 NSNotification 对象。
      【解决方案3】:

      您可以判断一个控制器出现是因为它被添加到堆栈中,还是因为另一个控制器从堆栈中弹出使用 isMovingToParentViewController。如果你在 B 中有这段代码,它会告诉你发生了什么:

      -(void)viewDidAppear:(BOOL)animated {
          if ([self isMovingToParentViewController]) {
              NSLog(@"Coming from A");
          }else{
              NSLog(@"Coming from C");
          }
      }
      

      【讨论】:

        猜你喜欢
        • 2014-01-29
        • 2013-10-17
        • 1970-01-01
        • 1970-01-01
        • 2011-12-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多