是否可以在 viewDidLoad() 中使用 @IB Action 函数?
这个 Action 很简单 - 一个 Stepper 相应地增加其他 label.text 值。但是,步进器需要使用的值取决于 url 的返回内容——当然,这些内容只有在 viewDidLoad() 之后才知道。
所以我认为我不能在 viewDidLoad() 之前将 IBaction 置于顶部,如果我尝试在 viewDidLoad() 中执行我的 IB 操作,我得到的错误是:
“只能将实例方法声明为‘IBAction’”
编辑
让我澄清一下,很抱歉造成混淆。我知道我需要一个 socket 来从中获取 UIStepper 值。我有那个:
@IBOutlet weak var stepper: UIStepper!
然后我有一个操作也连接到同一个 UIStepper,它将相应地增加/减少标签文本 (new_total) 的值:
@IBOutlet weak var new_total: UILabel!
@IBAction func step_up_pass(sender: AnyObject) {
new_total.text = "\(Int(stepper.value))"
}
但是,我想从一个值 (todays_price) 开始,我从一个 json 请求中返回并将其用作起点,使用步进器将其相乘并将相乘后的值放入标签的文本中。
我在单独的文件中有一个结构体定义了我的对象:
struct PassengerFromOtherBus {
var fname: String?
var lname: String?
var todays_price: Int?
init(json: NSDictionary) {
self.fname = json["fname"] as? String
self.lname = json["lname"] as? String
self.todays_price = json["todays_price"] as? Int
}
所以稍后在 View Controller 中,在 viewDidLoad() 内部,在连接到 URL 然后使用 NSJSONSerialization 和一堆其他代码解析它之后(我不需要让你混淆)我终于有我的值(value) todays_price。所以我的问题是,当它只在我的 viewDidLoad() 内部已知时,我如何让我的操作使用该值? Xcode 甚至不允许我将 IBAction 连接到 viewDidLoad 函数内的任何地方!
最佳答案
这不是通过 Action 完成的,而是通过 Outlet 完成的。将 IB 的 Stepper 作为 Outlet 连接到您的 ViewController。然后只需在 ViewDidLoad 中设置 Stepper 的值即可。
我绝不会直接从 UIStepper.value
转到 UILabel.text
。
使用中间变量来存储值。
对 JSON
的返回做同样的事情。通过在这些变量上设置 didSet
函数,您可以在更新任何值时更新 UI。
class FirstViewController: UIViewController {
var todays_price: Int = 0 {
didSet { // didSet to trigger UI update
myLabel.text = "\(stepperValue * todays_price)"
}
}
var stepperValue : Int = 1 {
didSet { // didSet to trigger UI update
myLabel.text = "\(stepperValue * todays_price)"
}
}
@IBOutlet weak var myStepper: UIStepper!
@IBOutlet weak var myLabel: UILabel!
override func viewDidLoad() {
//
let returnValueFromJson = 10
todays_price = returnValueFromJson
}
@IBAction func stepperUpdate(sender: AnyObject) {
stepperValue = Int(myStepper.value)
}
}
关于ios - Swift viewdidload 中的 @IB Action 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33601231/