【问题标题】:How to know the viewController already visited or not?如何知道 viewController 是否已经访问过?
【发布时间】:2016-11-10 07:01:40
【问题描述】:

我在 iPhone 应用程序中有多个视图控制器,并且从一开始就使用导航控制器。

我的问题是:当我要去第一个 viewController。然后我转到第二个 viewController,然后我回到第一个 viewController。在这里我怎么知道我已经看到了第一个视图。表示我想知道我是否访问了第一个 viewController?

我怎么知道这个?因为我在一个 viewController 中有一个功能,我希望该功能应该只运行一次,而不是一次又一次地运行。

任何人都可以帮我解决这个问题。

谢谢,

【问题讨论】:

  • 只需创建单例类并使用它来跟踪,因为它会在应用程序的生命周期中持续存在

标签: ios iphone uiviewcontroller


【解决方案1】:

导航控制器中当前存在的那些 UIViewController 的 UINavigationController 将管理堆栈,

由于你没有提到你的语言标签,我在 Objective-c 中发布了一个代码

NSArray *viewControllers = [[self navigationController] viewControllers];
for( int i=0;i<[viewControllers count];i++){
    id obj=[viewControllers objectAtIndex:i];
    if([obj isKindOfClass:[YourViewController class]]){
       // This view controller is visited by user and currently in the stack
    }
}

【讨论】:

    【解决方案2】:
    Create an array in app delegate. 
    In viewDidload  add an object of current View controller in an Array.
    Then finally you can check from array.
    If there will be name for a view controller class.
    That means user has visited to that class.
    As viewdidLoad only calls when user visits a view controller.
    

    【讨论】:

      【解决方案3】:

      您现在创建了一个 nsobject:class 和一个委托,无论您是否访问过该 viewController,您都可以手动保存。

      或者你可以通过 prepareForSegue 方法发送一个标志,据此你可以知道哪个被查看或没有被查看

      或者只是创建一个导航视图控制器类检查堆栈中哪个视图控制器是该数组中的最后一个。

      【讨论】:

        【解决方案4】:

        你应该做到这一点。

        如果你想在应用程序生命周期中只执行一次表单第一个 viewController 的代码,那么维护一个 bool 标志将它保存在 NSUserDefaults 中。 更重要的是,在第一个 viewController 的 viewDidLoad 中做这些事情

        看这里

        FirstViewController.m

        - (void)viewDidLoad {
            [super viewDidLoad];
        
            NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
            BOOL isFirstTime = [defaults boolForKey:@"FIRST_TIME"];
        
            if (isFirstTime == NO)
            {
                [defaults setBool:YES forKey:@"FIRST_TIME"];
        
                //Here Call Your Code
                [self callYourFunctionHere];
                [defaults synchronize];
            }
        }
        

        【讨论】:

          猜你喜欢
          • 2016-06-07
          • 2020-02-06
          • 2016-09-23
          • 1970-01-01
          • 2018-02-17
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多