【问题标题】:How to send data back to the previous interface controller?如何将数据发送回之前的接口控制器?
【发布时间】:2015-05-11 21:36:43
【问题描述】:

我想通过按下第二个界面控制器中的蓝色按钮来更新第一个界面控制器中的按钮标题(灰色按钮)。

  • 我可以使用计数器来更新标签,但是我该如何将结果发送回第一个接口控制器

  • 是否应该在第二个接口控制器中执行,然后通过push segue发回结果

  • 我将如何使用pushControllerWithName("secondController",context: ... )

我应该这样做吗:

var counter = 1

@IBAction func addOne() {

   greyButtonLabel.setTitle("\(counter++)")
   pushControllerWithName("secondController", context : add)
}


// The second interface controller

override func awakeWithContext(context: AnyObject?) {
      super.awakeWithContext(context)    

      if let addone = context as? counter {
         greyButtonLabel.setTitle("\(counter++)")
      }
}

【问题讨论】:

标签: swift watchkit


【解决方案1】:

当第一个界面控制器处于非活动状态时,您无法更改其 UI 元素。

这是一种可能的方法:

  • 将第一个接口控制器的self 发送到第二个接口控制器(使用pushControllerWithName("secondController", context: ... ))。
  • 在第二个接口控制器处于活动状态时更新第一个接口控制器中的属性。
  • 您可以通过调用第二个接口控制器的popController方法以编程方式返回到第一个接口控制器。
  • 当第一个界面控制器被激活时,读出属性并相应地更新按钮(在方法willActivate中)。

【讨论】:

  • 补充 vomako 的答案,这可能会帮助您了解 WKInterfaceController 处于活动状态的生命周期:blog.mikeswanson.com/post/118262770484/…
  • 谢谢,迈克,一如既往的棒!
  • 您应该通过调用popController 方法来关闭第二个接口控制器。不要启动新的推送 segue。
  • 除了Mike的精彩博客,您还可以参考文档:developer.apple.com/library/prerelease/ios/documentation/…
  • 当你这样做时,当你按下按钮时,第一个IC会显示更高的计数。到现在为止还挺好。但是,当用户点击后退图标时,它也会显示更高的计数。因此,我会在第二个界面控制器的 IBAction 方法中增加第一个界面控制器的属性值,然后在激活第一个视图控制器时使用此属性的值来更新您的标签。
猜你喜欢
  • 1970-01-01
  • 2017-03-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多