代码之家  ›  专栏  ›  技术社区  ›  Jon

UI元素未显示,变量来自segue

  •  -1
  • Jon  · 技术社区  · 9 年前

    控制器一,保存CK记录“详细信息”。控制器一中的一个按钮连接到另一个控制器。我已经为这个逻辑设置了下面的序列。。。

    @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中,我有以下接收变量和设置为这些新变量的标签。

    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
    }
    

    然而,这给我带来了问题,当我运行这段代码时,控制器2中没有出现标签(正确连接)。如图所示。

    Missing Labels

    我这里出了什么问题?

    3 回复  |  直到 9 年前
        1
  •  1
  •   Nirav D    9 年前

    您已添加 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中,如果使用native,则为batter Dictionary 具有 subscript 而不是 NSDictionary .

        2
  •  0
  •   Lineesh K Mohan    9 年前

    将prepareForSegue写为separatefunction,并调用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
    
        3
  •  0
  •   Sagar Chauhan    9 年前

    请更新在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!
        }...