Скрыть или показать статические ячейки TableViewController с сегментированным элементом управления - PullRequest
0 голосов
/ 15 декабря 2018

Я пытаюсь скрыть или показать ячейки tableviewcontroller, используя сегментированный элемент управления и переключатель.Код ниже не работает, и он будет печататься, только если я коснусь внутри ячейки.Я полагаю, что прикосновение приводит к перезагрузке таблицы.

Код:

override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
    let cell = super.tableView(tableView, cellForRowAt: indexPath)

    switch(profileSegment.selectedSegmentIndex) {

    case 0:
        print("Seg Change")
        if cell == self.reviewsCell {
            return 0
        }
        tableView.reload()
        break

    case 1:
        print("Seg Change")
        if cell == self.watchCell {
            return 0
        }
        if cell == self.watchedCell {
            return 0
        }
        if cell == self.reviewsCell {
            return 500
        }
        tableView.reload()
        break

    default:
        break

    }

    return super.tableView(tableView, heightForRowAt: indexPath)

}

Почему просмотр таблицы не перезагружается при переключении?Есть ли более эффективный способ добиться этого, кроме изменения размера на 0?

ОБНОВЛЕНИЕ:

Я попробовал другой маршрут и добился частичного успеха.Переключатель работает, но только делает ячейки пустыми.Что заставило бы ячейки полностью исчезнуть?

CODE:

func segChange(sender: UISegmentedControl) {

switch(profileSegment.selectedSegmentIndex) {

    case 0:
        self.reviewCell.isHidden = true
        self.cell.isHidden = false
        tableView.reloadData()

        break

    case 1:
        self.reviewCell.isHidden = false
        self.cell.isHidden = true
        tableView.reloadData()

        break

    default:
        break

    }

}

ОБНОВЛЕНИЕ 2: Если я использую код ниже tableView, я изменю ячейки в первый раз, когда я выбираю новый индекс сегмента, ноуправление сегментом не меняется и перестает отвечать на запросы.Почему сегмент реагирует именно так?Если я исправлю это, вопрос будет решен.

@objc func segChange() {

   tableView.reloadData()

}

override func viewDidLoad() {
    super.viewDidLoad()

profileSegment.addTarget(self, action: #selector(segChange), for: .valueChanged)


}


override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
    let cell = super.tableView(tableView, cellForRowAt: indexPath)

    switch(profileSegment.selectedSegmentIndex) {

    case 0:
        if cell == self.reviewsCell {
            return 0
        }
        break

    case 1:
        if cell == self.watchCell {
            return 0
        }
        if cell == self.watchedCell {
            return 0
        }
        if cell == self.reviewsCell {
            return 500
        }
        break

    default:
        break

    }

    return super.tableView(tableView, heightForRowAt: indexPath)
}

Ответы [ 3 ]

0 голосов
/ 15 декабря 2018

Я предлагаю вам перезагрузить табличное представление и установить количество строк в разделе равным 0

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
// if profileSegment.selectedSegmentIndex {
//  return 0 for this cell 
// }
// else {
//   return cell Height 
// }
}

и в вашей цели добавления в segmentedControl изменить флаг и перезагрузить табличное представление.

self.segmentedControl.addTarget(self, action: #selector(segmentedValueChanged), for: .valueChanged)
0 голосов
/ 19 декабря 2018

Решением моего последнего обновления является создание var selectedSegment = 0 в верхней части класса.

Затем добавьте:

@objc func segChange(sender: UISegmentedControl) {

    self.selectedSegment = sender.selectedSegmentIndex //Add this line of code

   tableView.reloadData()

}

Это говорит сегментированному элементу управления обновить выбранный индекс,Это заставляло мою не отвечать, когда я менял индекс.

0 голосов
/ 15 декабря 2018

Сравнение ячеек - проблема

 if cell == self.reviewsCell { // it's wrong to keep cells ( like reviewsCell  ) as vars 

вам нужно проверить указатели

 if indexPath.row == 3 {   // hide cell at indexPath 3
...