Один tableView с двумя разными cell.xib. Если я нажму одну ячейку, нужно отобразить вторую ячейку. Как? - PullRequest
0 голосов
/ 30 октября 2019

Я беру tableView и два разных файла cell.xib, которые я хочу отобразить, когда я щелкаю ячейку 1. Затем я должен отобразить данные ячейки 2.

class TableView: UIViewController,UITableViewDelegate,UITableViewDataSource {

    @IBOutlet weak var tableView: UITableView!

    var array1 = ["Click1","Click2"]
    var array2 = [[ "one","two","Three"],["Four","Five"]]
    var selectedArray = [String]()

        override func viewDidLoad() {
            super.viewDidLoad()

            tableView.register(UINib(nibName: "MainCell", bundle: nil) , forCellReuseIdentifier: "MainCell")//This is used to add xib file with identifier

            tableView.register(UINib(nibName: "SecondCell", bundle: nil) , forCellReuseIdentifier: "SecondCell")

        }

        //MARK:DataSource Methods
        func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
            return array1.count
        }

        func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
            let cell = self.tableView.dequeueReusableCell(withIdentifier: "MainCell") as! MainCell
            cell.textLabel?.text = array1[indexPath.row]
            return cell
        }
        //MARK: tableViewDelegate Method
        func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {

            let cell = self.tableView.dequeueReusableCell(withIdentifier: "SecondCell") as! SecondCell

            selectedArray = array2[indexPath.row]
            cell.textLabel?.text = selectedArray[indexPath.row]


        }


    }

Скажите, как мне это сделать, если я нажму первую ячейкудолжен показывать значения 2-й ячейки согласно indexPath.row

Ответы [ 4 ]

1 голос
/ 30 октября 2019

Я думаю, вы хотите достичь расширяющихся клеток. Для этого вы можете использовать ячейку заголовка.

Возможно, вы захотите прочитать this :

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

0 голосов
/ 30 октября 2019

Вы можете развернуть вторую ячейку по щелчку первой ячейки.

См. Этот пример, чтобы развернуть и свернуть ячейки

https://github.com/jonasman/JNExpandableTableView

0 голосов
/ 30 октября 2019
var allCellsArray = ["Click1","Click2"]
var displayingCellsArray = ["Click1"]

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

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        var cell: UITableViewCell!
        if displayingCellsArray[indexPath.row] == "Click1" {
            cell = self.tableView.dequeueReusableCell(withIdentifier: "MainCell") as! MainCell
        }else {
            cell = self.tableView.dequeueReusableCell(withIdentifier: "SecondCell") as! SecondCell
        }
        cell.textLabel?.text = displayingCellsArray[indexPath.row]
        return cell
    }
    //MARK: tableViewDelegate Method
    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {

        let data = displayingCellsArray[indexPath.row]
        //Below logic will show (Cell2 if Cell1 is clicked and hide Cell1)
        // (and show Cell1 if clicked Cell2 and hide Cell2)
        if data == "Click1" {
            displayingCellsArray = [allCellsArray.last!]            
        }else {
            displayingCellsArray = [allCellsArray.first!]
        }

        tableView.reloadData()
    }

Вы должны обрабатывать такую ​​логику в отдельном массиве источника данных, добавляя / удаляя данные такого типа из этого массива, которые показывают конкретные ячейки. Например, в вашем случае у вас есть два значения в array Click1 & Click2 Click1 показывает MainCell & Click2 показывает SecondCell Так что сначала добавьте Click1 в ваш массив, и когда эта ячейка будет нажата простодобавьте Click2 в ваш массив и reload. Если вы хотите удалить MainCell, когда отображается SecondCell, то при добавлении Click2 просто удалите Click1

0 голосов
/ 30 октября 2019

Например, вы можете добавить флаг, который указывает, была ли нажата первая ячейка.

var wasFirstCellTapped = false

Тогда numberOfRowsInSection зависит от этого флага:

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return wasFirstCellTapped ? array1.count : 1
}

В didSelectRowAt:indexPath установите этот флаг на true. И выполнить изменения tableView. Самый простой способ - позвонить tableView.reloadData(). Но вы можете анимировать это, используя insertRowsAtIndexPaths

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