ios - Swift viewdidload 中的 @IB Action 函数

标签 ios swift ibaction viewdidload

是否可以在 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 的值即可。

enter image description here

我绝不会直接从 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/

相关文章:

c++ - 我怎样才能忽略 Xcode 中的一些错误?

ios - 在 UITextView 中创建一个可点击的文本部分

ios - 如何在 UIPageViewController iOS Swift 3 中更改页面后进行小摇晃

iphone - iOS - IBAction - 用户正在输入的文本字段

ios - UIButton 执行不同的操作 ios

ios - GiphyCore.swift文件通过cocoapods在安装的GiphyCoreSDK中丢失

ios - 使用标签关闭 UIImageView

swift - 重写方法会产生冲突或找不到其父级等效方法

ios - 我在 Pod 文件中的 Protobuf/Wrappers 导入中收到了 swift 错误

objective-c - 为什么 IBAction 在 vi​​ewdidload 之前调用?