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

Я создал два UITableView внутри UIViewController. Чтобы связать с delegate и datasource, я использовал базовый метод, удерживая Ctrl и перетаскивая на «желтый шар» выше. Тем не менее, я могу сделать это только с одним, когда каждый UITableView должен отдельно иметь свою собственную базу данных в классе. Когда я делаю то же самое со вторым UITableView, он, очевидно, связывает одни и те же datasource и delegate с обоими, не извлекая данные из класса во вторую и отображая их на экране.

Как я могу это исправить?

//I declared four buttons, two in each table view.    

    @IBOutlet weak var btnDrop: UIButton!
    @IBOutlet weak var tblView: UITableView!


    @IBOutlet weak var btnDropProj: UIButton!
    @IBOutlet weak var tblViewProj: UITableView!

    override func viewDidLoad() {
        super.viewDidLoad()
        tblView.isHidden = true
        tblViewProj.isHidden = true


    }

var selectClient = ["Cliente 1", "Cliente 2", "Cliente 3", "Cliente 4", "Cliente 5", "Cliente 6", "Cliente 7", "Cliente 8"]

var selectProject = ["Projeto 1", "Projeto 2", "Projeto 3", "Projeto 4", "Projeto 5", "Projeto 6", "Projeto 7", "Projeto 8"]

Ответы [ 2 ]

0 голосов
/ 27 апреля 2019
// MARK: - UITableView datasource
func numberOfSections(in tableView: UITableView) -> Int {
    return 1
}

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    if tableView == self.tblView {
        return selectClient.count
    }
    else {
        return selectProject.count
    }
}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
{
    if tableView == self.tblView {
        let CellIdentifier: String = "YOURCUSTOMCELL"
        var cell: YOURCUSTOMCELL? = (tableView.dequeueReusableCell(withIdentifier: CellIdentifier) as? YOURCUSTOMCELL)

        if cell == nil {
            let topLevelObjects: [Any] = Bundle.main.loadNibNamed("YOURCUSTOMCELL", owner: nil, options: nil)!
            cell = (topLevelObjects[0] as? YOURCUSTOMCELL)
            cell?.selectionStyle = .none
        }
        cell?.backgroundColor = UIColor.white
        return cell!
    }
    else {
        let CellIdentifier: String = "YOURCUSTOMCELL"
        var cell: YOURCUSTOMCELL? = (tableView.dequeueReusableCell(withIdentifier: CellIdentifier) as? YOURCUSTOMCELL)

        if cell == nil {
            let topLevelObjects: [Any] = Bundle.main.loadNibNamed("YOURCUSTOMCELL", owner: nil, options: nil)!
            cell = (topLevelObjects[0] as? YOURCUSTOMCELL)
            cell?.selectionStyle = .none
        }
        cell?.backgroundColor = UIColor.white
        return cell!
    }

}

func tableView(_ tableView: UITableView, estimatedHeightForRowAt indexPath: IndexPath) -> CGFloat {
    if tableView == self.tblView {
        return 50.0
    }
    else {
        return 50.0
    }
}

func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
    return UITableView.automaticDimension
}

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath)   {
    if tableView == self.tblView {

    }
    else {
    }
}
0 голосов
/ 27 апреля 2019

Мне кажется, что вы пытаетесь связать свои представления таблиц с 2 различными источниками данных.

Вы можете сделать это, сначала создав 2 отдельных источника данных, как показано ниже.

class Table1DataSource: NSObject, UITableViewDataSource {

    // Properties
    private var table1Data: [String]

    init(table1Data: [String]) {
        self.table1Data = table1Data

        super.init()
    }

    // MARK: - Data Source

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

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

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

        var profileCell: ProfileCell

        let cell = tableView.dequeueReusableCell(withIdentifier: Table1Cell.reuseIdentifier, for: indexPath) as! Table1Cell

        // Initialize the cell here

        return cell

    }

}

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

class MainController: UIViewController {

    // Outlets
    @IBOutlet weak var tblView: UITableView!
    @IBOutlet weak var tblViewProj: UITableView!

    // Properties
    var selectClient = ["Cliente 1", "Cliente 2", "Cliente 3", "Cliente 4", "Cliente 5", "Cliente 6", "Cliente 7", "Cliente 8"]
    var selectProject = ["Projeto 1", "Projeto 2", "Projeto 3", "Projeto 4", "Projeto 5", "Projeto 6", "Projeto 7", "Projeto 8"]

    // DataSource
    lazy var tblViewDataSource: Table1DataSource = {
        return Table1DataSource(table1Data: self.selectClient)
    }()

    override func viewDidLoad() {
        super.viewDidLoad()

        self.tblView.dataSource = self.tblViewDataSource
    }

}

Осталось только повторить шаги, чтобы связать вашу вторую таблицу.

Надеюсь, это поможет!

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