2016-12-29 2 views
0

У меня есть UITableViewController, показывающий всех моих пользователей из Firebase в списке. Если вы нажмете на одного пользователя, вы увидите еще один UITableViewController со статическим макетом TableView, подготовленным в Interface Builder, для изменения свойств пользователя. Я хочу передать UID выбранного пользователя в DetailTableViewController, чтобы загрузить все текущие данные пользователя.Swift 3: передать строку из TableViewController в другой TableViewController

EDIT: Этот вопрос не является точным дубликатом. Я хочу передать данные с одного UITableViewController другим образом UITableViewController не является нормальным Подробно UIViewController!

Это мой текущий код первого TableViewController.

Может кто-нибудь мне помочь? Я не понимаю.

UserListTableViewController.swift:

import UIKit 
import Firebase 
import FirebaseAuth 
import FirebaseDatabase 

class UserListTableViewController: UITableViewController { 

    var dbRef:FIRDatabaseReference! 
    var user = [User]() 

    var writeSelectedUID:String! 
    var selectedUID: String = "Mister X" 

    override func viewDidLoad() { 
     super.viewDidLoad() 
    } 

    override func viewDidAppear(_ animated: Bool) { 
     super.viewDidAppear(animated) 
     self.startObservingDB() 
    } 

    func startObservingDB() { 
     dbRef.observe(.value, with: { (snapshot:FIRDataSnapshot) in 
      var newUser = [User]() 

      for user in snapshot.children { 
       let userObject = User(snapshot: user as! FIRDataSnapshot) 
       newUser.append(userObject) 
      } 
      self.user = newUser 
      self.tableView.reloadData() 
     }) { (error:Error) in 
      print(error.localizedDescription) 
     } 
    } 

    // MARK: - Table view data source 
    override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
     return user.count 
    } 

    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
     let cell = tableView.dequeueReusableCell(withIdentifier: "User Cell", for: indexPath) as! CustomUserListTableViewCell 

     // Configure the cell 
     let userRow = user[indexPath.row] 
     cell.userFirstLastNameLabel?.text = "\(userRow.firstName!) \(userRow.lastName!)" 
     cell.userUsernameLabel?.text = "@\(userRow.username!)" 
     } 
     return cell 
    } 

    override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 
     //let selectedUID = user[indexPath.row] 
     let selectedUserRow = user[indexPath.row] 
     self.writeSelectedUID = "\(selectedUserRow)" 
     performSegue(withIdentifier: "editUser", sender: self) 
    } 

    override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
     // Get the new view controller using segue.destinationViewController. 
     let viewcontroller = segue.destination as! ManageUserSettingsTableViewController 
     // Pass the selected object to the new view controller. 

     if(segue.identifier == "editUser") { 
      viewcontroller.usernameTextField.text! = "\(self.writeSelectedUID)" 
      print("Var: \(self.writeSelectedUID)") 
     } 
    } 
} 

ответ

0

В UserListTableViewController.swift:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
    // Get the new view controller using segue.destinationViewController. 
    let viewcontroller = segue.destination as! ManageUserSettingsTableViewController 
    // Pass the selected object to the new view controller. 

    //let object = self.writeSelectedUID as? String 
    // let object = self.writeSelectedUID as! String! 

    if(segue.identifier == "editUser") { 
      if let object = self.writeSelectedUID { 
        viewcontroller.detailItem = object as AnyObject? 
      } 
    } 
} 

В вашем AnotherViewController:

var detailItem: AnyObject? 

usernameTextField.text = detailItem?.description 
+0

Ваша версия дала мне ту же ошибку я имел: «Фатальная ошибка : неожиданно найдено nil при развертывании опции «Я добавил рабочее решение –

Смежные вопросы