用户界面元素没有出现变量来自赛格
问题描述:
控制器一个持有CK记录,“细节”。控制器1中的一个按钮会跳到另一个控制器。我有以下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
}...
在控制器配备了两个,我有以下的接收变量和标签设置为这些新的变量。
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
}
但是,这是导致我的问题,当我运行此代码时,没有标签(正确连接)出现在控制器二。如图所示。
什么我收到错在这里?
答
写prepareForSegue作为separatefunction并呼吁performSegue调用赛格瑞
请查阅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
答
您在booton
动作中添加了prepareForSegue
,但它应该与您的其他课程级别方法一起使用。
@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
}
...
}
}
注:在斯威夫特是连击,如果你使用本地Dictionary
与subscript
而不是NSDictionary
。
答
请更新您的代码,以便在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!
}...
增加@ Nirav-D答案。这是正确的。第一 - 你应该**从不**结束函数中的函数(就像你有)。其次(不太重要)现在,Swift使用Dictionary,除非有特定的NSDictionary原因。 – dfd