【发布时间】:2016-11-20 13:38:17
【问题描述】:
我有这个表视图,我想将用户名传递给视图控制器并在标签中显示它,但它不起作用。用户名来自 firebase 数据库。我还检查了其他问题,但无法将其应用于我的问题。我不是编码专家:
import Foundation
import UIKit
import Firebase
import FirebaseDatabase
import FirebaseAuth
struct user {
let username : String!
}
class MainScreen: UITableViewController {
var Users = [user]()
override func viewDidLoad() {
let databaseRef = FIRDatabase.database().reference()
databaseRef.child("users").queryOrderedByKey()
.observe(.childAdded, with: { snapshot in
print(snapshot)
let username = (snapshot.value as? NSDictionary)!["username"] as! String
print(username)
self.Users.append(user(username: username))
self.tableView.reloadData()
print(self.Users)
})
}
override func tableView(_ tableView: UITableView,
numberOfRowsInSection section: Int) -> Int {
return Users.count
}
override func tableView(_ tableView: UITableView,
cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "Cell")
let nameLbl = cell?.viewWithTag(1) as! UILabel
nameLbl.text = self.Users[indexPath.row].username
return cell!
}
@IBAction func ShowDetail(_ sender: Any) {
var selectedLabel:String?
func tableView(tableView: UITableView,
didSelectRowAtIndexPath indexPath: NSIndexPath) {
print("Row \(indexPath.row)selected")
selectedLabel = self.Users[indexPath.row].username
performSegue(withIdentifier: "detailView", sender: self)
}
func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if(segue.identifier == "detailView") {
let vc = segue.destination as! CallDetail
vc.stringPassed = selectedLabel!
}
}
}
而接收的 ViewController 看起来像这样:
import UIKit
class CallDetail: UIViewController {
@IBOutlet weak var UserName: UILabel!
var stringPassed = String()
override func viewDidLoad() {
super.viewDidLoad()
UserName = stringPassed.text
}
}
【问题讨论】:
-
func ShowDetail(_ sender: Any) 方法的目的是什么?您应该在同一类范围级别上实现其内部方法
-
你能告诉我们什么不起作用吗?例如,在您的观察闭包中, print(snapshot) 是否打印快照? print(userName) 是否打印用户名?你在哪里“传递”数据?它似乎存储在一个数组中,然后在实例化 viewController 后分配给一个变量(未传递用户名)
-
嗨,Jay,很抱歉不够精确。从我的角度来看,唯一不起作用的是数据的传递。因此,新 Viewcontroller 中的标签保持空白。我将数据传递给另一个视图控制器,并且用户名应该出现在标签字段中。本质上,我尝试构建一个带有细节的表格视图(Viewcontroller 中的细节)。
标签: ios swift uitableview firebase swift3