gpt4 book ai didi

ios - 在 WatchKit 中的接口(interface) Controller 之间传递数据

转载 作者:IT王子 更新时间:2023-10-29 05:39:08 26 4
gpt4 key购买 nike

我如何使用 Swift 将存储在标签中的数据从我的界面 Controller 传递到 WatchKit 中的另一个界面 Controller ?我似乎无法在任何地方找到答案,希望这里有人可以帮助我。我包含了我的代码部分,用于计算我需要传递的值。我基本上想显示由用户计算的相同值,并在下一个名为 ResultsController 的界面 Controller 中对其进行详细说明。非常感谢任何帮助:D

class InterfaceController: WKInterfaceController {
var currentValue: String = "0"

func setDisplayValue(value: Double)
{
var percent = value
// check if value is an integer
if value % 1 == 0
{
// our value is an integer
currentValue = "\(Int(value))"// new value %
}
else
{
// our value is a float
currentValue = "\(value)"
}
// Display 2 decimal places in final amount
var round = NSString(format:"%.2f", value)
displayLabel.setText("$\(round)") // Display final value
// This value is what I want to be passed to another label in another IC.
}

// Answer Tapped
@IBAction func totalTapped() {
if command != nil
{
let answer = command!.executeWithNewValue((currentValue as NSString).doubleValue)
setDisplayValue(answer)
command = nil
calculationExecuted = true
}
}
}

这是第二个界面 Controller ,我希望使用标签显示第一个界面 Controller 的值。

import WatchKit
import Foundation


class ResultsController: WKInterfaceController {

@IBOutlet weak var totalLabel: WKInterfaceLabel!

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

// Label to hold the same value as in previous Interface Controller
totalLabel.setText("")
}

override func willActivate() {
// This method is called when watch view controller is about to be visible to user
super.willActivate()
}

override func didDeactivate() {
// This method is called when watch view controller is no longer visible
super.didDeactivate()
}

}

编辑:这是我遵循的教程,我对其进行了一些操作,本质上是一个小费校准。我在 ResultsController 中添加以保存用户使用 InterfaceController 中的计算器输入的信息,但我似乎无法将数据传递给我在 RC 中的标签,在命令中我删除了减法和除法,因为我不需要那些.所以我仅有的计算按钮是乘法和加法。它应该如何工作的示例:输入 12.58 点击乘法并输入 15 点击添加 并显示最终数量 14.46我需要在单独的标签中将所有这些值传递给 RC。

Github Tutorial - Apple Watch

这是我想要完成的:将初始金额传递给标签、小费金额以及最终费用以将标签分开以类似于账单。

最佳答案

最好的方法是覆盖 contextForSegueWithIdentifier当您从一个 View 转到下一个 View 时调用的方法。

WKInterfaceController 之间传递数据的方法与在传统 iOS 应用程序中通过 UIViewController 传递数据的方法有点不同。

通常,你会做这样的事情:

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if segue.identifier == "showDetail" {
let controller: DetailViewController = (segue.destinationViewController as UINavigationController).topViewController as DetailViewController
controller.myVariable = myValue
}
}

但是,WatchKit 中没有prepareForSegue 方法。 contextForSegueWithIdentifier WKInterfaceController 方法相似,但有一个明显的区别:它不为您提供目标 View Controller 的实例。

相反,您从方法返回数据,并在目标类中访问该数据。

因此,在您的情况下,它看起来像这样:

// In InterfaceController
override func contextForSegueWithIdentifier(segueIdentifier: String) -> AnyObject? {
// You may want to set the context's identifier in Interface Builder and check it here to make sure you're returning data at the proper times

// Return data to be accessed in ResultsController
return self.currentValue
}

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

// Make sure data was passed properly and update the label accordingly
if let val: String = context as? String {
self.totalLabel.setText(val)
} else {
self.totalLabel.setText("")
}
}

关于ios - 在 WatchKit 中的接口(interface) Controller 之间传递数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29403780/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com