ios - 如何从 Swift 中的 TableCell 类访问 UIViewController 类中的值?

标签 ios swift uitableview firebase firebase-realtime-database

因此,我有一个带有 TableViewUIViewController(PledgeViewController)。当用户单击 TableViewUITableViewCell(PledgeTableViewCell) 中的 UIButton(plusBtn) 时,我想对我的 firebase 执行写入操作数据库。但是为了获得确切的路径,我需要一个来自 PledgeViewController 类的 String(getID),它是从先前的 ViewController 接收到的一个 segue。对于我使用的 MVC 格式,如何访问 PledgeViewController 中的值以从 PledgeTableViewCell 写入数据库?

enter image description here 我的 PledgeViewController.swift:

import UIKit
import Foundation
import FirebaseDatabase
import Firebase

class PledgeViewController: UIViewController, UITableViewDataSource, UITableViewDelegate{


    var getID: String!

    @IBOutlet weak var pledgeAmtLabel: UILabel!
    @IBOutlet weak var RewardChooseTable: UITableView!
    @IBAction func pledgeBtn(_ sender: Any) {
        //get the text from the label and run all the checks to see if the tickets are available

    }

    let RewardRef = Database.database().reference().child("Rewards")

    var rewards = [Rewards]()

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

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

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

        let cell = tableView.dequeueReusableCell(withIdentifier: "TakePledgeCell", for: indexPath) as! PledgeTableViewCell
        let reward = rewards[indexPath.row]
        cell.reward = reward
        return cell

    }



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

        RewardRef.child(getID).observe(.value, with: { (snapshot) in
            self.rewards.removeAll()

            for child in snapshot.children {
                let childSnapshot = child as! DataSnapshot
                let reward = Rewards(snapshot: childSnapshot)
                self.rewards.insert(reward, at: 0)
            }

            self.RewardChooseTable.reloadData()
        })

    }

    override func viewDidLoad() {
        super.viewDidLoad()

        print("The id received from the SingleViewControl is:" + getID)
}

}

我的 PledgeTableViewCell.swift:

import UIKit
import Firebase
import FirebaseDatabase

class PledgeTableViewCell: UITableViewCell {


    @IBOutlet weak var rewardAmtLabel: UILabel!
    @IBOutlet weak var ticketClasslabel: UILabel!
    @IBOutlet weak var ticketDescLabel: UILabel!

    @IBOutlet weak var ticketCountLabel: UILabel!
    @IBOutlet weak var plusBtn: UIButton!
    @IBOutlet weak var minusBtn: UIButton!
    var ref: DatabaseReference!
    var artcallid: Int!

    @IBAction func minusBtn(_ sender: Any) {
    }


    var reward: Rewards! {
        didSet {

            rewardAmtLabel.text = "Rs. " + String(reward.rewardAmt)
            ticketClasslabel.text = reward.reward_class_name
            ticketDescLabel.text = reward.reward_desc
            print(reward.reward_class_name + " is one of the rewards")

        }

    }

    @IBAction func plusBtn(_ sender: AnyObject) {


    }


}

奖励.swift:

import Foundation
import Firebase
import FirebaseDatabase

class Rewards {
    let ref: DatabaseReference!
  //  let countRef: DatabaseReference!
    var rewardAmt: Int!
    var rewardsLeft: Int!
    var reward_class_name: String = ""
    var reward_amt: String = ""
    var reward_desc: String = ""
    var rewardID: String = ""
    var tickUpCount = 0
    var tickDownCount = 0

    init(text: String) {
        ref = Database.database().reference().child("Fund").childByAutoId()
      //  countRef = Database.database().reference().child("Testing").childByAutoId()
    }



   init(snapshot: DataSnapshot)
    {
        ref = snapshot.ref
        if let value = snapshot.value as? [String : Any] {
            rewardAmt = value["reward_ticket_amount"] as! Int
            reward_class_name = value["reward_ticket_amount_class_name"] as! String
            reward_amt = value["reward_ticket_amount_txt"] as! String
            reward_desc = value["reward_ticket_class_desc"] as! String
            rewardsLeft = value["rewards_left"] as! Int
            rewardID = snapshot.key

        }
    }

    }

extension Rewards{

    func countUp(){
        tickUpCount += 1
        ref.child("uppingTicket").setValue(tickUpCount)

    }

}

最佳答案

你可以试试闭包

class PledgeTableViewCell: UITableViewCell {
  //Define a closure

    var closure:(() -> Void)? = nil

@IBAction func plusBtn(_ sender: AnyObject) {

 // Do you stuff

   closure?()
    }
}

    class PledgeViewController: UIViewController, UITableViewDataSource, UITableViewDelegate{

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

    let cell = tableView.dequeueReusableCell(withIdentifier: "TakePledgeCell", for: indexPath) as! PledgeTableViewCell

            let reward = rewards[indexPath.row]
            cell.reward = reward
            cell.closure = {
        // You will get the callback in this block
       // You can define the parameterized closure to return the value

    }
            return cell
 }

关于ios - 如何从 Swift 中的 TableCell 类访问 UIViewController 类中的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51419688/

相关文章:

iphone - 比较 NSdate 时出现意外错误

swift - 在 2 个页面之间传递状态 SwiftUI

ios - 从 "cellForRowAtIndexPath"中插入行时 UITableView 崩溃

ios - 追加从不同 View Controller 创建的新对象执行segue

objective-c - 同一 View 中的多个 UIAlertView

swift - 为什么需要字符串来确定第 N 个字符的索引?

ios - viewForHeaderInSection 对齐错误(Swift 3)

ios - 内部带有 UITextView 的自定义 UITableViewCell 不可使用 layoutsubviews 进行编辑

ios - 为什么我的 tableViewController 没有加载任何数据?

ios - 如何触发 Collection View 的 didSelectItemAtIndexPath : on tap while it's scrolling?