【发布时间】:2016-10-25 12:15:00
【问题描述】:
我现在将值从 VC1 传递到 VC2
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
if indexPath.row == 0 {
FIRDatabase.database().reference().child("Menus/Day1").observeSingleEvent(of: .value, with: {(snap) in
if let snapDict = snap.value as? Dictionary <String, AnyObject>{
let date = snapDict["mealPic"] as! String
let OrderInfo = DataService.ds.REF_ORDER
let USERUID = FIRAuth.auth()!.currentUser!.uid
let userinfo = OrderInfo.child(date).child(USERUID).child("data")
self.valueToPass = date
}
})
}
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if(segue.identifier == "ToVari") {
var Vari = segue.destination as! Variation
Vari.passedValue = valueToPass
}
}
还有我的 VC2 viewDidLoad:-
var passedValue : String!
override func viewDidLoad() {
super.viewDidLoad()
MEALDATE.text = passedValue
// Do any additional setup after loading the view.
}
它确实有效,但奇怪的是 VC2 中的“passedValue”一开始没有显示(我选择 VC1 中的单元格执行Segue 到 VC2)
我必须回到 VC1,然后再次点击单元格到 VC2,让“passedValue”显示它应该在那里的内容。
有人知道为什么会这样吗?
【问题讨论】:
-
我猜你的 segue 是直接从单元格到下一个 VC,你的 Firebase 调用不是异步的吗?我会将转场从 VC1 放到 VC2(而不是从 VC1 中的单元格),一旦你设置了 valueToPass,我就会执行转场(同时可能会显示一个微调器)。
-
首先准备 Segue 方法被调用,在 didSelectRowAt 方法被调用之后。这就是为什么你第一次没有得到任何值,但是当你返回并返回时,你会得到存储在 valueToPass 变量中的前一个值
-
你的 VC1 的 didSelectRowAt 被调用了?还是不行?
标签: ios swift firebase tableviewcell