如何在返回视图时快速执行某些代码

问题描述:

当颠倒视图的细节时,我想要执行某些代码。这与viewdidload不同,或viewdidappear不同,因为我不希望它在应用第一次启动时运行,因为它是我的初始视图控制器,但只有在从另一个视图返回时才会运行。如何在返回视图时快速执行某些代码

我该如何去做到这一点?

谢谢。

你应该为这种事情使用委托,这是第一个tutorial i saw on google about it,但谷歌可以为一些不同的。委托是所有iOS开发人员应该知道的以及何时使用的关键编码模式。

因此,在你的情况下,你的第一个视图控制器将是第二个视图控制器的委托,这将允许第二个vc在第一个vc上执行方法,当它看起来合适时,对于这种情况我会假设在第二个VC可以追溯到第一

最简单的方法是让一些布尔属性格式(如Bool firstAppear),然后用真正的初始化它在viewDidLoad方法,然后在viewDidAppear:

if firstAppear { 
    firstAppear = false 
    return 
} 

您可以使用viewWillAppear中和viewDidAppear方法。他们不仅召唤了一次,而且每次都会出现您的视图控制器。 viewDidLoad在视图控制器加载后仅调用一次

+0

感谢您的 – Khoury

让我们考虑两个视图控制器VC1和VC2。您现在处于VC2并尝试导航。在VC2的ViewWillDisappear中试试这个代码。

let defaults = NSUserDefaults.standardUserDefaults() 
    defaults.setBool(true, forKey: "mykey") 

现在您正在导航回到VC1。在VC1 viewWillAppear中使用此代码

let defaults = NSUserDefaults.standardUserDefaults() 
let mykey = defaults.boolForKey("mykey") 
    if mykey { 
     defaults.setBool(false, forKey: "mykey") 
     //execute your code here 
    } 
+0

这不适合我吗? – Khoury

首先,你可以设置此例如在的AppDelegate

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { 
... 
    let alreadyLaunched = NSUserDefaults.standardUserDefaults().boolForKey("alreadyLaunched") 
    if alreadyLaunched { 
     print("This is not the first app launch.") 
    } 
    else { 
     print("First app launch, setting NSUserDefault.") 
     NSUserDefaults.standardUserDefaults().setBool(true, forKey: "alreadyLaunched") 
    } 
} 

然后检查,无论你想:

let alreadyLaunched = NSUserDefaults.standardUserDefaults().boolForKey("alreadyLaunched") 
if alreadyLaunched { 
    print("This is not the first app launch.") 
}