Переключатель Swift 4 относится к этикетке на tableView - PullRequest
0 голосов
/ 28 сентября 2018

У меня проблема с получением ярлыка от ячейки при включении переключателя ON .Я получаю все метки из базы данных Firebase.

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

    let cell = tableView.dequeueReusableCell(withIdentifier: "tagCell", for: indexPath) as! TagsTableViewCell
    print(myCallList[indexPath.row])
    let _tag = myCallList[indexPath.row]
    cell.tagLabel?.text = _tag.type

    return cell
}

enter image description here

ОБНОВЛЕНО: UITableViewCell не содержит ничего особенного

import UIKit

class TagsTableViewCell: UITableViewCell {

    @IBOutlet weak var tagLabel: UILabel!
    @IBOutlet weak var tagSwitch: UISwitch!
    override func awakeFromNib() {
        super.awakeFromNib()
        // Initialization code
    }

    override func setSelected(_ selected: Bool, animated: Bool) {
        super.setSelected(selected, animated: animated)

        // Configure the view for the selected state
    }

}

Моя модель:

class Calls: NSObject {
    var type: String?

    init(type: String?) {
        self.type = type
    }
}

LoadCalls содержат выборку данных Firebase:

func LoadCalls() {
        ref = Database.database().reference()
        let userID = Auth.auth().currentUser?.uid
        self.myCallList.removeAll()
        ref.child("tags").observe(.childAdded, with: { (snapshot) in
            if snapshot != nil{
                var tagType = snapshot.key as? String
                let myCalls = Calls(type: tagType)
                self.myCallList.append(myCalls)
                print(self.myCallList.count)
                DispatchQueue.main.async {
                    self.tagsTableView.reloadData()
                }
            }
        })
    }

Ответы [ 2 ]

0 голосов
/ 28 сентября 2018

Делегат / протокол для связи между ячейкой и настольным контроллером может хорошо работать здесь.

protocol switchCellDelegate : Class {
     func cellSwitchChanged( value: String, sender: Any)
}

обновить ячейку табличного представления со свойством и IBAction для изменения переключателя

class TagsTableViewCell: UITableViewCell {

     weak var delegate : switchCellDelegate?

     @IBAction func switchChanged(sender: UISwitch){
         guard let delegate = delegate else { return }
         if sender.isOn {
              delegate.cellSwitchChanged( value: tagLabel.text, sender: self)
          }
     }

, а затем в cellForRowAtIndex добавить это

cell.delegate = self

и контроллер

extension myController : switchCellDelegate {
     func cellSwitchChanged( value: String, sender: Any){
         //do what you want here
     }
}
0 голосов
/ 28 сентября 2018

Полагаю, что-то вроде этого - добавьте тег в переключатель и создайте для него действие

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

    let cell = tableView.dequeueReusableCell(withIdentifier: "tagCell", for: indexPath) as! TagsTableViewCell
    print(myCallList[indexPath.row])
    let _tag = myCallList[indexPath.row]
    cell.tagLabel?.text = _tag.type
    cell.switcher.tag = indexPath.row

    return cell
}

И после этого

@IBAction func switcherChanged(_ sender: UISwitch) {
   var getLabel = myCallList[(sender as AnyObject).tag]
   print(getLabel.type)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...