我一直在尝试一切,但似乎没有任何效果。我试图将firebase用户信息从一个视图控制器传递到另一个视图控制器,但它永远不会出现。
从表格视图开始 表视图中填充了从我的firebase数据库中提取的用户。当用户选择单元格时,执行以下代码: 我引用函数" showProfileControllerForUser"作为传输所选单元格数据的一种方式
var mainProfile: userProfileNavigator?
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
let user1 = self.users[indexPath.row]
self.mainProfile?.showProfileControllerForUser(user3: user1)
let storyboard: UIStoryboard = UIStoryboard(name: "Main", bundle:nil)
let vc: UINavigationController = storyboard.instantiateViewController(withIdentifier: "mainNavProfile") as! UINavigationController
self.present(vc, animated: true, completion: nil)
}
在" userProfileNavigator"是以前使用的功能的地方。该函数传递收集的信息并将其传递到最终目的地。
func showProfileControllerForUser(user3: User){
mainProfile?.user2 = user3
}
最后," mainProfile"是我想要传递数据的地方。
var user2: User?{
didSet{
navigationItem.title = user2?.name
}
我可以想象这非常混乱,如果需要,我可以提供更多信息或清晰度
试图设置表格如下:
var mainProfile: mainProfile?
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
let user1 = self.users[indexPath.row]
let storyboard: UIStoryboard = UIStoryboard(name: "Main", bundle:nil)
let vc: UIViewController = storyboard.instantiateViewController(withIdentifier: "mainProfile")
self.mainProfile?.user2 = user1
self.present(vc, animated: true, completion: nil)
}
正在传递信息的ViewController:
import UIKit
import Firebase
class mainProfile: UIViewController{
@IBOutlet weak var testLabel: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
print("lets see if this is the new user", user2.name as Any)
}
var user2 = User()
}
但它仍然出现在" nil"
答案 0 :(得分:3)
如果我理解你的问题,那么你有两个ViewControllers
。一个包含UITableView
,另一个包含ShowProfileControllerForUser
。
在包含ViewController
的{{1}}中,代码为:
UITableView
此外,我不确定您是否提出了正确的 override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
let user1 = self.users[indexPath.row]
let storyboard: UIStoryboard = UIStoryboard(name: "Main", bundle:nil)
let vc: UINavigationController = storyboard.instantiateViewController(withIdentifier: "mainNavProfile") as! UINavigationController
vc.user3 = user1
self.present(vc, animated: true, completion: nil)
}
。
在ViewController
,
ShowProfileControllerForUser.swift
现在在var user3 = User // declare a variable with proper type.
:
viewDidLoad()
修改强>
override func viewDidLoad() {
super.viewDidLoad()
showProfileControllerForUser(user3)
}
答案 1 :(得分:1)
如果要打开具有该传递值的控制器,可以在实例化后设置该值
let storyboard: UIStoryboard = UIStoryboard(name: "Main", bundle:nil)
let vc: UINavigationController = storyboard.instantiateViewController(withIdentifier: "mainNavProfile") as! UINavigationController
// this is what your showProfileControllerForUser doing
vc.user2 = user1
self.present(vc, animated: true, completion: nil)