замена ячейки на лету в состоянии c UITableView - PullRequest
0 голосов
/ 13 апреля 2020

в приложении, которое я пишу, у меня есть форма, построенная с использованием раскадровки вокруг UITableView с stati c ячейками в UITableViewController. В таблице 6 строк, которые собирают разные биты информации. Строка 0,3,4,5 имеет текстовое поле / текстовое представление / метки для сбора / отображения некоторой информации, строка 1 имеет UICollectionView с дюжиной или около того значков. строка 2 имеет высоту 50, но пока пуста.

Изображение UITableViewController

эта установка работает хорошо, но я пытаюсь добавить некоторые функции, и я в тупике. в зависимости от того, что я выбираю в UICollectionView (в строке 1), я хотел бы загрузить одну из нескольких различных ячеек в строке 2

, например, если я нажму на 2-й значок (кровяное давление), ячейка для загрузки в строке 2 будет использоваться для ввода значений систоли c и диастоли c. если я нажму на 3-й значок (температура), ячейка для загрузки в строке 2 будет использоваться для ввода температуры, и т. д. c ...

Я разработал ячейки в отдельных файлах классов UITableViewCell и соответствующие файлы XIB. я знаю, как их зарегистрировать, используя

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

, но я не уверен, куда поместить логи c, чтобы обновить таблицу на лету.

   if eventTypeCollectionIndex == 4 {
        let cell = tableView.dequeueReusableCell(withIdentifier: "myBPTableCell", for: indexPath) as! myBPdTableCell
        return cell
    }

Я думал в

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

но так как эта функция должна возвращать ячейку, я не уверен, как вернуть уже существующие ячейки для чего-либо, кроме строки 2

благодаря Сами

1 Ответ

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

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

Вы бы использовали перезагрузить строки или self.tableView.reloadData()

Так, например, :

var didTap = false

func buttonTapped() {
  didTap = true
  // Reload table
}

А затем либо используйте другой перо для ячейки:

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
  if didTap {
    // show new appearance
    let cell = tableView.dequeueReusableCell(withIdentifier: "myBPTableCell", for: indexPath) as! myBPdTableCell
    return cell
  } else {
    // show original
    let cell2 = tableView.dequeueReusableCell(withIdentifier: "myBPTableCell2", for: indexPath) as! myBPdTableCell2
    return cell2
  }
}

Или вы можете обновить свойства этого же класса перьев:

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "myBPTableCell", for: indexPath) as! myBPdTableCell
  if didTap {
    // show new appearance
    cell.backgroundColor = .white
  } else {
    // show original
    cell.backgroundColor = .black
  }
  return cell
}

Редактирование на основе комментария:

Вы также можете просто сделать следующее, где у вас есть одна ячейка для строки 2, а затем еще одна ячейка для других строк:

if indexPath.row == 2 {
  let cell = tableView.dequeueReusableCell(withIdentifier: "myBPTableCell", for: indexPath) as! myBPdTableCell

    if didTap {
       cell.backgroundColor = .white
    } else {
       cell.backgroundColor = .black
    }

    return cell
} else {
  let cell = tableView.dequeueReusableCell(withIdentifier: "myOtherCell", for: indexPath) as! myOtherCell
    return cell
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...