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函数内的任何位置!
这不是使用Action而是使用Outlet完成的.将IB作为插座的步进器连接到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)
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
897 次 |
| 最近记录: |