【发布时间】:2016-04-27 08:11:41
【问题描述】:
当反转视图的转场时,我希望执行某些代码。这与 viewdidload 或 viewdidappear 不同,因为我不希望它在应用程序首次启动时运行,因为它是我的初始视图控制器,但仅在从另一个视图返回时运行。
我该如何实现这一目标?
谢谢。
【问题讨论】:
标签: ios swift viewdidload
当反转视图的转场时,我希望执行某些代码。这与 viewdidload 或 viewdidappear 不同,因为我不希望它在应用程序首次启动时运行,因为它是我的初始视图控制器,但仅在从另一个视图返回时运行。
我该如何实现这一目标?
谢谢。
【问题讨论】:
标签: ios swift viewdidload
您应该为这类事情使用委托,这是第一个 tutorial i saw on google about it,但可以在 Google 上搜索一些不同的。委托是所有 iOS 开发人员都应该知道以及何时使用的关键编码模式。
因此,在您的情况下,您的第一个视图控制器将是第二个视图控制器的委托,这将允许第二个 vc 在它认为合适时在第一个 vc 上执行方法,对于这种情况,我假设在第二个 vc 之前回到第一个
【讨论】:
最简单的方法是保留一些布尔属性(例如Bool firstAppear),然后在 viewDidLoad 方法中将其初始化为 true,然后在 viewDidAppear 中:
if firstAppear {
firstAppear = false
return
}
【讨论】:
您可以使用 viewWillAppear 和 viewDidAppear 方法。他们不仅调用了一次,而且每次都调用您的视图控制器。 viewDidLoad 在视图控制器加载后只调用一次
【讨论】:
让我们考虑两个视图控制器 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
}
【讨论】:
首先,您可以在 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.")
}
【讨论】: