在Swift中的viewdidload里面的@IB Action函数

Cha*_*man 1 viewdidload ibaction ios swift

是否可以在viewDidLoad()中包含@IB Action函数?

动作很简单 - 步进器相应地增加其他label.text值.但是,步进器需要使用的值取决于url的返回内容 - 当然只有在viewDidLoad()之后才知道.

所以我认为我不能在viewDidLoad()之前将IBaction方式放在首位,如果我尝试在viewDidLoad()中执行我的IB操作,我得到的错误是:

"只有实例方法可以声明'IBAction'"

编辑

让我澄清一下,抱歉这是混乱.我知道我需要一个插座来获取UIStepper值.我有这个:

    @IBOutlet weak var stepper: UIStepper!
Run Code Online (Sandbox Code Playgroud)

然后我有一个连接到同一个UIStepper的动作,它将相应地增加/减少标签文本(new_total)的值:

@IBOutlet weak var new_total: UILabel!

@IBAction func step_up_pass(sender: AnyObject) {
    new_total.text = "\(Int(stepper.value))"
    }
Run Code Online (Sandbox Code Playgroud)

但是,我想从一个值(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
}
Run Code Online (Sandbox Code Playgroud)

}

所以稍后在视图控制器中,在viewDidLoad()内部,连接到URL然后使用NSJSONSerialization和其他一些代码解析它(我不需要让你迷惑)我终于有了我的价值todays_price.所以我的问题是,当我的viewDidLoad()内部只知道它时,如何使用该值?Xcode甚至不允许我将IBAction连接到viewDidLoad函数内的任何位置!

R M*_*nke 5

这不是使用Action而是使用Outlet完成的.将IB作为插座的步进器连接到ViewController.然后只需在ViewDidLoad中设置Stepper的值.

在此输入图像描述

我永远不会直接从一个UIStepper.valueUILabel.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)

    }

}
Run Code Online (Sandbox Code Playgroud)