swift - 如何使用来自 UIView 单元格的 firebase 用户名重命名不同 View Controller 中的按钮?

标签 swift xcode

当从单元格中选择该用户时,我正在尝试使用我的 firebase 数据库中的用户名重命名“添加保镖”按钮

// Code for the contacts page where a user is selected from cell.


class ContactsTableViewController: UITableViewController { 
var ref: DatabaseReference!,
    posts = [eventsStruct]()

    let cellId = "cellId"
    var users = [CurrentUser]()


    struct eventsStruct {
        let email: String!
        let username: String!
        let phoneNumber: String!
    }
    override func viewDidLoad() {
        super.viewDidLoad()

        fetchUser()
    }

    func fetchUser() {
        ref = Database.database().reference()
        ref.child("Users").queryOrderedByKey().observe(.childAdded, with:{(snapshot) in
            if let usersDictionary = snapshot.value as? [AnyHashable:String]
            {
                let email = usersDictionary["email"]
                let username = usersDictionary["username"]
                let phoneNumber = usersDictionary["phoneNumber"]



                self.posts.insert(eventsStruct (email: email, username: username, phoneNumber: phoneNumber), at: 0)

                DispatchQueue.main.async {
                    self.tableView.reloadData()
                }

                print(eventsStruct.init(email: email, username: username, phoneNumber: phoneNumber))
            }
        })



    override func numberOfSections(in tableView: UITableView) -> Int {
        return 1
    }


    override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return posts.count
    }

    var homeViewController: HomeViewController?
    //tap to dismiss contacts page
    override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        dismiss(animated: true) {
            print("dismiss completed")
            let user = self.posts[indexPath.row]

       self.homeViewController?.addBodyguard.setTitle(user.email, for: .normal)
        }
    }

    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {



        let cell = tableView.dequeueReusableCell(withIdentifier: cellId, for: indexPath)
   //     let cell = UITableViewCell(style: .subtitle, reuseIdentifier: cellId)


        let user = posts[indexPath.row]
        cell.textLabel?.text = user.username
        cell.detailTextLabel?.text = user.phoneNumber

        return cell
    }

    @IBAction func cancelTapped(_ sender: Any) {
        dismiss(animated: true, completion: nil)
    }



// the HOMEVIEWcontroller containing the button to be renamed

class HomeViewController: UIViewController, UISearchBarDelegate, CLLocationManagerDelegate, MKMapViewDelegate {

 @IBOutlet weak var addBodyguard: UIButton!

  @IBAction func Addguard(_ sender: Any) {
        self.performSegue(withIdentifier: "contactsSegue", sender: nil)

    }
}

最佳答案

与其在 ContactViewController 中设置 UIButtons 的标题,不如使用委托(delegate)将此事件传递给 HomeViewController

protocol ContactSelectionDelegate {
 func contactSelected(email: String) -> Void
}

extension HomeViewController: ContactSelectionDelegate {
 func contactSelected(email: String) -> Void {
   self.addBodyguard.setTitle(email, for: .normal)
 }
}

// In your HomeViewController

@IBAction func Addguard(_ sender: Any) { 
  self.performSegue(withIdentifier: "contactsSegue", sender: nil)
}

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
   if (segue.identifier == "contactsSegue")
    {
        let secondViewController = segue.destinationViewController as! ContactViewController
        secondViewController.delegate = self
    }
}


// In your ContactViewController
class ContactViewController {

 ....
 weak var delegate: ContactSelectionDelegate?

 ...

 override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    dismiss(animated: true) {
        print("dismiss completed")
        let user = self.posts[indexPath.row]

   self.delegate?.contactSelected(email: user.email)
    }
 }
}


关于swift - 如何使用来自 UIView 单元格的 firebase 用户名重命名不同 View Controller 中的按钮?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55440493/

相关文章:

xcode - 无法将 Realm 框架导入 swift 项目

ios - NSLocalizedString() 的第二个参数是什么?

swift - tableView.beginUpdates() 行为异常

ios - 快速实现导航菜单的标准方法是什么?

swift - MailCore2 的电子邮件帐户

ios - 初始化时阻止 UICollectionView 加载

objective-c - Objective C 中的天数列表

ios - 如何在 IOS 8 中制作像 Spotify 那样的侧边栏菜单

xcode - Cocoa - 基于 View 的 NSTableView,在多个表中使用一个单元格

xcode - Swift 共享库获取命令行应用程序的静态链接?