如何通过单击 TableCell 中的按钮将 TableCell 中标签的值传递给 TableViewController?

阿琼拉姆

所以,我有一个带有 UITableView 的 ViewController(PledgeViewController) 和另一个名为 PledgeTableViewCell.swift 的文件,它是一个 UITableCell 文件。当有人单击 PledgeTableViewCell.swift 中的按钮 (plsBtn) 时,我设置了一个闭包,该闭包反馈到 PledgeViewController 中,然后我从那里处理我的操作。我现在想做的是:

当有人单击 PledgeTableViewCell 中的 plsBtn 时,我正在 PledgeViewController 中处理该操作。但我想在该 indexPath 处读取 TableViewCell 中标签的值,并将其发送到 PledgeViewController 以进行进一步计算。我可以用闭包本身来做到这一点还是有另一种方法?谢谢!

PledgeTableViewCell.swift:

import UIKit
import Firebase
import FirebaseDatabase


class PledgeTableViewCell: UITableViewCell {

    var plusBtnAction: ((Any) -> Void)?
    var minusBtnAction: ((Any) -> Void)?

    @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 currentID = ""
    var ticket_count: Int = 0
    let userID = Auth.auth().currentUser!.uid

    @IBAction func minusBtn(_ sender: Any) {

        if var tickCount = Int(ticketCountLabel.text!) {

            if(tickCount > 0)
            {
                tickCount -= 1
                ticketCountLabel.text = String(tickCount)
            }
        }

        self.minusBtnAction?(sender)
    }

    @IBAction func plusBtn(_ sender: AnyObject) {


        if var tickCount = Int(ticketCountLabel.text!) {

//I WANT TO SEND THIS 'TICKCOUNT' TO THE PLEDGEVIEWCONTROLLER
            tickCount += 1
            ticketCountLabel.text = String(tickCount)
        }


        self.plusBtnAction?(sender)

    }


}

PledgeViewController.swift:

import UIKit
import Foundation
import FirebaseDatabase
import Firebase

class PledgeViewController: UIViewController, UITableViewDataSource, UITableViewDelegate{


    var getID: String!
    var rewards = [Rewards]()
    var ticket_count: Int = 0
    var ref: DatabaseReference!
    let userID = Auth.auth().currentUser!.uid
    var rewardID: 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

    }

    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        /*  myIndex = indexPath.row

         finalId = idTable[myIndex]
         let story = stories[indexPath.row]
         ArtcallID = story.id

         performSegue(withIdentifier: "singleArtcall", sender: self)
         */
        let reward = rewards[indexPath.row]
        let id = reward.rewardID
        reward.countUp()

        print("The reward that was touched is: " + id )
        print("One of the buttons were touched")
    }

    let RewardRef = Database.database().reference().child("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
        cell.currentID = getID
        rewardID = reward.rewardID

        cell.plusBtnAction = { sender in

            let reward = self.rewards[indexPath.row]
            cell.reward = reward
            let local_id = reward.rewardID

            self.ref=Database.database().reference().child("Fund_Project_Request").child(self.getID).child(self.userID).child(local_id).child("Ticket_count")


            self.ref.observeSingleEvent(of: .value, with: { (snapshot) in
                // Get user value

                if snapshot.value is NSNull{
                    self.ticket_count = 0
                    self.ticket_count += 1
                    self.ref.setValue(self.ticket_count)
                }

                else{
                    self.ticket_count = snapshot.value as! Int
                    self.ticket_count += 1
                    self.ref.setValue(self.ticket_count)
                }


            }) { (error) in
                print(error.localizedDescription)
            }

           Database.database().reference().child("Rewards").child(self.getID).child(local_id).child("reward_ticket_amount").observeSingleEvent(of: .value, with: { (snapshot) in
                // Get user value
                let reward_amt = snapshot.value as! Int

                self.pledgeAmtLabel.text = String(reward_amt)

            }) { (error) in
                print(error.localizedDescription)
            }

            // Do whatever you want from your button here.
        }



        cell.minusBtnAction = { sender in

            let reward = self.rewards[indexPath.row]
            cell.reward = reward
            let local_id = reward.rewardID

        self.ref=Database.database().reference().child("Fund_Project_Request").child(self.getID).child(self.userID).child(local_id).child("Ticket_count")
            self.ref.observeSingleEvent(of: .value, with: { (snapshot) in
                // Get user value

                if snapshot.value is NSNull{

                }

                else{

                    self.ticket_count = snapshot.value as! Int
                    if(self.ticket_count != 0)
                    {
                        self.ticket_count -= 1
                        self.ref.setValue(self.ticket_count)
                    }
                }


            }) { (error) in
                print(error.localizedDescription)
            }



        }



        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)
}

}
苏希特·帕蒂尔

您可以在闭包本身中与发件人一起传递标签值。

class PledgeTableViewCell: UITableViewCell {

    var plusBtnAction: ((String) -> Void)?
    var minusBtnAction: ((String) -> Void)?



     @IBAction func minusBtn(_ sender: Any) {

          if var tickCount = Int(ticketCountLabel.text!) {

            if(tickCount > 0)
            {
                tickCount -= 1
                ticketCountLabel.text = String(tickCount)

            }
            self.minusBtnAction?(tickCount)
        }
    }

    @IBAction func plusBtn(_ sender: AnyObject) {

        if var tickCount = Int(ticketCountLabel.text!) {

//I WANT TO SEND THIS 'TICKCOUNT' TO THE PLEDGEVIEWCONTROLLER
            tickCount += 1
            ticketCountLabel.text = String(tickCount)
            self.plusBtnAction?(ticketCount)
        }

       }
    }

cellForRow:方法中PledgeViewController

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

        let cell = tableView.dequeueReusableCell(withIdentifier: "TakePledgeCell", for: indexPath) as! PledgeTableViewCell
        .....
        cell.plusBtnAction = { labelText in
           //handle labelText here
        }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

TableCell中的标签未调整大小

JavaFx:如何正确触发TableCell中的updateItem

如何监听 TableCell 中动态生成的按钮的点击?

通过单击而不是双击开始编辑TableCell

如何使用javascript或jquery从动态表中获取所有tablecell值

如何使用JavaFX从选定TableRow中的TableCell中删除选择

如何在RichTextBox中显示TableCell的工具提示

如何检测JavaFx中的ComboBox(TableCell Combobox)双击?

如何从JavaFX的TableCell中获取行引用的对象?

如何在asp.net的tablecell中添加新表

如何在FXML中定义可编辑的TableCell?

JavaFX-将控件(如按钮)放在TableCell中吗?

将焦点设置为tableCell中的UITextField

尝试提交TableCell时将调用cancelEdit()

Swift:将tableCell转换为变量类

JTable行高亮提示基于TableCell的值

如何将用户图像从 Tablecell 传递到 Firebase 上的 Viewcontroller?

如何使用 Selenium WebDriver 和页面对象模式单击具有多个链接的 TableCell 中的特定链接?

如何在Web控件内包含html元素,例如C#中的TableCell

Javafx:从 TableCell 获取属性

JavaFX着色TableCell

将点击事件添加到JavaFX TableCell

在 javafx 中的 tableView 中自定义 TableCell

如何根据行项目的属性设置 TableCell 的样式?

如何垂直对齐FlowDocument的TableCell(或其内容)

如何使TableCell可编辑,使其自动更新数据类?

如何使用TableCell为表格列设置图像

如何在tablecell asp.net中使用添加的表格

突出显示用于JTable筛选的TableCell中的subString