Как сохранить данные из определенной ячейки с действием? - PullRequest
0 голосов
/ 11 февраля 2019

У меня есть ViewController с TableView внутри.У меня также есть TableViewCell контроллер.

Каждая ячейка моей таблицы содержит информацию от Firebase и кнопку.

Цель здесь - добавить в мою базу данных информацию о моей ячейке, когда янажмите на кнопку.

По сути, у меня есть список песен с add button на каждой, и я хочу добавить песню в свою учетную запись, когда нажимаю add.

Список песен хорошо отображается, но я не знаю, как поместить информацию из этой песни в мою базу данных, когда нажимаю кнопку «Добавить».

Код модели:

import Foundation

class ServiceModel {

    var name: String?
    var category: String?
    var pricing: String?

    init(name: String?, category: String?, pricing: String?){
        self.name = name
        self.category = category
        self.pricing = pricing
    }
}

Код TableViewCell:

class PopularTableViewCell: UITableViewCell {

    @IBOutlet weak var imageService: UIImageView!
    @IBOutlet weak var labelName: UILabel!
    @IBOutlet weak var labelCategory: UILabel!
    @IBOutlet weak var labelPricing: UILabel!

Код ViewController:

import UIKit
import FirebaseDatabase
import FirebaseAuth

class AddSubViewController: UIViewController,UITableViewDelegate,UITableViewDataSource {

    var refServices:DatabaseReference!

    @IBOutlet weak var ListPop: UITableView!

    var serviceList = [ServiceModel]()

    var databaseHandle:DatabaseHandle?

    let userID = Auth.auth().currentUser?.uid


    @IBAction func addSub(_ sender: Any) {

        let ref = Database.database().reference()
            let usersReference = ref.child("users")
            let uid = Auth.auth().currentUser?.uid
            let thisUserReference = usersReference.child(uid!).child("subs").childByAutoId()
        thisUserReference.setValue("test")

**// I want to put the pricing value of the song of my cell instead of "test" in: setValue("test")**

    }

    public func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {

        return serviceList.count
    }

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

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

        let service: ServiceModel

        service = serviceList[indexPath.row]

        cell.imageService?.image = UIImage(named: service.name! + ".png")
        cell.labelName?.text = service.name
        cell.labelCategory?.text = service.category
        cell.labelPricing?.text = service.pricing

        return cell
    }

    override func viewDidLoad() {
        super.viewDidLoad()

        ListPop.delegate = self
        ListPop.dataSource = self

        refServices = Database.database().reference().child("Categories")

        refServices.observe(DataEventType.value, with: { (snapshot) in

            if snapshot.childrenCount > 0 {

                self.serviceList.removeAll()

                for services in snapshot.children.allObjects as! [DataSnapshot] {
                    let serviceObject = services.value as? [String: AnyObject]
                    let serviceName  = serviceObject?["Name"]
                    let serviceCategory  = serviceObject?["Category"]
                    let servicePricing = serviceObject?["Pricing"] as! String + " €"
                    let service = ServiceModel(name: serviceName as! String?, category: serviceCategory as! String?, pricing: servicePricing as String?)

                    self.serviceList.append(service)
                }

                self.ListPop.reloadData()
            }
        })
    }

}

Я хочу указать значение ценыпесня моей ячейки вместо "теста" в: setValue("test")

1 Ответ

0 голосов
/ 11 февраля 2019

Если в каждой ячейке есть кнопка, вы можете просто сохранить модель после того, как пользователь нажмет кнопку, поскольку у вас есть пользовательская модель (которая может быть просто struct btw), вы можете создать переменную для нее и для каждой ячейки в табличном представлении * 1001.* метод источника данных вы можете назначить его

class PopularTableViewCell: UITableViewCell {

    var service: ServiceModel!

    @IBAction func addButtonPressed(_ sender: UIButton) {
        ... // save certain service
    }

}

...

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

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

    let service = serviceList[indexPath.row]

    cell.service = service // <---

    cell.imageService?.image = UIImage(named: service.name! + ".png")
    cell.labelName?.text = service.name
    cell.labelCategory?.text = service.category
    cell.labelPricing?.text = service.pricing

    return cell
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...