2016-11-10 39 views
0

我在iPhone应用程序中有多个视图控制器,我从开始使用导航控制器。如何知道viewController已经访问或没有?

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

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

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

感谢,

+1

刚刚创建单独的类并用它来追踪,因为它坚持通过应用程序的生命 – Tj3n

回答

0
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. 
2

有将堆栈那些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 
    } 
} 
0

您创建一个NSObject的:类和委托现在是否访问,你可以手动保存viewContr或者不是。

或者您也可以通过prepareForSegue方法来发送一个标志,并根据u可以知道哪些是看过或未

或者只是创建导航视图控制器类检查栈的viewController是最后那个阵列英寸

0

你应该做到这一点。

如果您想在应用程序生命周期中只执行一次窗体第一个viewController的代码,那么保持一个布尔标志将其保存在NSUserDefaults中。 更重要的是,做这个东西,在viewDidLoad中第一的viewController的

看到这里

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]; 
    } 
} 
相关问题