【问题标题】:How to execute certain code when returning to a view swift快速返回视图时如何执行某些代码
【发布时间】:2016-04-27 08:11:41
【问题描述】:

当反转视图的转场时,我希望执行某些代码。这与 viewdidload 或 viewdidappear 不同,因为我不希望它在应用程序首次启动时运行,因为它是我的初始视图控制器,但仅在从另一个视图返回时运行。

我该如何实现这一目标?

谢谢。

【问题讨论】:

    标签: ios swift viewdidload


    【解决方案1】:

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

    因此,在您的情况下,您的第一个视图控制器将是第二个视图控制器的委托,这将允许第二个 vc 在它认为合适时在第一个 vc 上执行方法,对于这种情况,我假设在第二个 vc 之前回到第一个

    【讨论】:

      【解决方案2】:

      最简单的方法是保留一些布尔属性(例如Bool firstAppear),然后在 viewDidLoad 方法中将其初始化为 true,然后在 viewDidAppear 中:

      if firstAppear {
        firstAppear = false
        return
      }
      

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          【解决方案4】:

          让我们考虑两个视图控制器 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
              }
          

          【讨论】:

            【解决方案5】:

            首先,您可以在 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.")
            }
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2017-10-20
              • 2012-07-28
              • 1970-01-01
              • 2011-09-10
              • 2020-09-11
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多