UITableViewController и элементы другой природы - PullRequest
0 голосов
/ 02 июня 2018

Обычно, когда я делаю UITableViewController, я привык, что все элементы имеют одинаковый тип данных и стиль.Например, список изображений, или ряды имен пользователей, или что-то в этом роде.

Я помогал кому-то работать над проектом, и требовалось, чтобы на каждой стороне экрана были пузыри чата.Это достаточно просто, так как в зависимости от пользователя я могу просто показать / скрыть пузырь и назначить текст каждой строке.Пузырь чата похож в том смысле, что это просто текст и отметка времени.«Природа» этого пузыря та же самая, только ориентированная влево или вправо.

Однако сложность заключается в том, что если кто-то присоединяется к каналу чата в определенное время, он хочетчтобы показать это.Вот пример:

enter image description here

Итак, как вы можете видеть, это пузыри чата, но в 21:23 я должен показать эту новую строку, которая указываеткто-то присоединился к каналу.

Полагаю, мой объект DTO / привязки данных теперь будет выглядеть следующим образом:

  • text: String // Текст, который нужно отобразить (при необходимости)
  • userId: UUID // идентификатор пользователя, который «предпринял действие» для этого
  • actionDate: TimeInterval // время соединения или чата (может быть любым)
  • actionType: Int// или enum - 0 означает, что они присоединились, 1 означает, что они общались
  • alignRight: Bool // Я могу заставить API определять пользователя контекста и определять, появляется ли пузырь чата справа / слева.

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

1 Ответ

0 голосов
/ 02 июня 2018

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

Предположительно, у вас есть пользовательский ChatCell (или, по крайней мере, вам действительно следует).Он отображает пузырь чата, отметку времени, и вы можете установить его выравнивание.

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

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

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let someData = someModel[indexPath.row]
    if someData.actionType == .chatted {
        // create, setup and return a ChatCell
    } else {
        // create, setup and return an EventCell
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...