UI元素不会出现来自segue的变量

时间:2017-02-01 04:51:41

标签: ios swift uilabel segue ckrecord

控制器一,持有CK记录,"细节"。 Controller One中的一个按钮会切换到另一个Controller。我为该逻辑设置了以下segue ...

@IBAction func booton(_ sender: Any) {
    func prepareForSegue(segue: UIStoryboardSegue, sender: Any?)
    {
        if segue.identifier == "lastsegue"
        {
          if let destination = segue.destination as? FoodDetail01
          {
            let lastreservation = detail.value(forKey: "Reservation") as? String
            let lasttake = detail.value(forKey: "Take") as? String

            destination.reservation = lastreservation
            destination.take = lasttake
        }...

在Controller Two中,我有以下接收变量和设置为这些新变量的标签。

import UIKit

class FoodDetail01: UIViewController {

     var reservation: String!
     var take: String!

@IBOutlet weak var reservationlabel: UILabel!
@IBOutlet weak var takelabel: UILabel!

override func viewDidLoad() {
    super.viewDidLoad()

    self.reservationlabel.text = reservation
    self.takelabel.text = take
}

然而,这导致我的问题,当我运行此代码时,控制器二中没有出现任何标签(正确连接)。如图所示。

Missing Labels

我在这里弄错了什么?

3 个答案:

答案 0 :(得分:1)

您已在prepareForSegue操作中添加了booton,但应该使用其他类级方法。

@IBAction func booton(_ sender: Any) {
     //Button action code
}

//prepareForSegue is outside from that method like other method of class
override func prepareForSegue(segue: UIStoryboardSegue, sender: Any?)
{
    if segue.identifier == "lastsegue"
    {
        if let destination = segue.destination as? FoodDetail01 {
            let lastreservation = detail.value(forKey: "Reservation") as? String
            let lasttake = detail.value(forKey: "Take") as? String

            destination.reservation = lastreservation
            destination.take = lasttake
        }
        ...
    }
}

注意:在Swift中,如果您使用Dictionary而不是subscript而使用原始NSDictionary,则会更糟糕。

答案 1 :(得分:0)

请更新您在segue中传递字符串值的代码。 加!经过最后的保存和持续。如果你没有添加它,它传递零值。你可以通过添加断点进行检查。

@IBAction func booton(_ sender: Any) {
func prepareForSegue(segue: UIStoryboardSegue, sender: Any?)
{
    if segue.identifier == "lastsegue"
    {
      if let destination = segue.destination as? FoodDetail01
      {
        let lastreservation = detail.value(forKey: "Reservation") as? String
        let lasttake = detail.value(forKey: "Take") as? String

        destination.reservation = lastreservation!
        destination.take = lasttake!
    }...

答案 2 :(得分:0)

将prepareForSegue写为单独的函数并调用performSegue来调用segue

请在SWIFT 3中找到代码

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {

    if segue.identifier == "lastsegue"
    {
      if let destination = segue.destination as? FoodDetail01
      {
        let lastreservation = detail.value(forKey: "Reservation") as? String
        let lasttake = detail.value(forKey: "Take") as? String

        destination.reservation = lastreservation
        destination.take = lasttake
      }
    }
}

@IBAction func booton(_ sender: Any) {

    self.performSegue(withIdentifier: "lastsegue", sender: self)
}

请检查这些值是否为零

let lastreservation = detail.value(forKey: "Reservation") as? String
let lasttake = detail.value(forKey: "Take") as? String