TableView didSelectRow не может работать как ожидаемый результат - PullRequest
0 голосов
/ 05 апреля 2020

В соответствии с показанным видео, я хочу, чтобы TransactionListViewController отображал ячейку, выбранную из AccountViewController, как выбранную.

Однако TransactionViewController показывает только Раздел 0 Строка 0 и Раздел 0 Строка 1, в то время как другие раздел и строка продолжают отображать Раздел 0 Строка 1

Ожидаемый результат

Секция 0, строка 0 будет выполнять данные перехода и извлечения для секции 0, строка 0

Секция 0, строка 1 будет выполнять данные передачи и извлечения для секции 0, строка 1

Секция 1 , Строка 0 будет выполнять данные передачи и извлечения для раздела 1, строка 0

Секция 1, строка 1 будет выполнять данные передачи и извлечения для раздела 1, строка 1

Раздел 2, строка 0 будет Выполните переход и данные извлечения для Раздела 2, Строка 0

Раздел 2, Ряд 1 выполнит данные перехода и извлечения для Раздела 2, Строка 1

enter image description here

#AccountTableViewController

 var accTypePA : Results<AccTypePA>?
 var accTypeCA : Results<AccTypeCA>?
 var accTypeInv : Results<AccTypeInv>?
 var accTypeAss : Results<AccTypeAss>?
 var accTypeLbty : Results<AccTypeLbty>?

 override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        tableView.deselectRow(at: indexPath, animated: true)

        if indexPath.section == 0 {
            let strAccountPA = accTypePA
            selectedPA = strAccountPA?[indexPath.row]
            performSegue(withIdentifier: "SegToTransactionPage", sender: indexPath.row)

        } else if indexPath.section == 1 {
            let strAccountCA = accTypeCA
            selectedCA = strAccountCA?[indexPath.row]
            performSegue(withIdentifier: "SegToTransactionPage", sender: indexPath.row)

        } else if indexPath.section == 2 {
            let strAccountCA = accTypeCA
            selectedCA = strAccountCA?[indexPath.row]
            performSegue(withIdentifier: "SegToTransactionPage", sender: indexPath.row)

        } else if indexPath.section == 3 {
            let strAccountCA = accTypeCA
            selectedCA = strAccountCA?[indexPath.row]
            performSegue(withIdentifier: "SegToTransactionPage", sender: indexPath.row)

        } else if indexPath.section == 4 {
            let strAccountCA = accTypeCA
            selectedCA = strAccountCA?[indexPath.row]
            performSegue(withIdentifier: "SegToTransactionPage", sender: indexPath.row)
        }

    }

    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        if(segue.identifier == "SegToTransactionPage") {
            if let transactionVC = segue.destination as? TransactionTableViewController {

                transactionVC.selectedPA = self.selectedPA
                transactionVC.selectedCA = self.selectedCA
                transactionVC.selectedInv = self.selectedInv
                transactionVC.selectedAss = self.selectedAss
                transactionVC.selectedLbty = self.selectedLbty

            }

        }
    }


# TransactionListTableViewController

var selectedPA : AccTypePA?
var selectedCA : AccTypeCA?
var selectedInv : AccTypeInv?
var selectedAss : AccTypeAss?
var selectedLbty : AccTypeLbty?


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

        if section == 0 {
            print("Selected section 0 : \(section)")
            return selectedPA?.transPAList.count ?? 0
        } else if section == 1 {
            print("Selected section 1 : \(section)")
            return selectedCA?.transCAList.count ?? 0
        } else if section == 2 {
        print("Selected section 2 : \(section)")
        return selectedCA?.transCAList.count ?? 0
        } else if section == 3 {
        print("Selected section 3 : \(section)")
        return selectedCA?.transCAList.count ?? 0
        } else if section == 4 {
        print("Selected section 4 : \(section)")
        return selectedCA?.transCAList.count ?? 0
        }
        return transactions?.count ?? 1
        } 

1 Ответ

0 голосов
/ 05 апреля 2020

Почему Вы используете только row как sender вместо целого indexPath? Тогда у вас есть вся информация, необходимая для вашего перехода. И для меня Вы должны использовать модель вместо indexPath для выполнения segue. Этот код очень подвержен ошибкам. Также Вы можете использовать переключатель вместо if else в большинстве мест.

А как второй экран узнает, что Вы выбрали на первом экране? Вы должны пересмотреть свою реализацию. На втором экране Вы не работаете с индексом раздела с первого. Просто отправьте модель данных, которую Вы хотите отобразить, и go оттуда.

Кроме того, Вы не отменяете ранее установленные значения как «self.selectedPA» и другие «выбранные» значения.

...