Я использую tableView для отображения данных пользователей, я хочу включить выбор нескольких пользователей, и на данный момент он работает со сбоями, так что когда я отменяю выбор выбранного пользователя, сведения о пользователе все еще остаются в массиве, который я храню внутри. Как я могу это исправить. ниже мой код в настоящее время
struct ChatUser {
var id: String
var name: String
}
var selectedUser: [ChatUser] = []
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
if self.selectedUser.contains(self.users[indexPath.row]) {
let myIndex = self.selectedUser.index(of: self.users[indexPath.row])
self.selectedUser.remove(at: myIndex!)
} else {
self.selectedUser.append(self.users[indexPath.row])
}
selectedUser.forEach { (user) in
print("SELECTD \(user.id)")
}
}
@King, вы можете использовать метод didDeselectRowAt
для удаления данных.
Здесь нужно убедиться, что структура является эквивалентной.
extension ChatUser: Equatable {
static func == (lhs: ChatUser, rhs: ChatUser) -> Bool {
return lhs.id == rhs.id
}
}
Вот почему ваши .contains
и .indexOf
не работают должным образом
так как мне теперь это использовать?
@King Просто добавьте это расширение под своей моделью чата, оно будет работать автоматически, если только это не работает.
Для удаления выбранных вами данных для множественного выбора вы можете использовать didDeselectRowAt
метод делегата tableview.
struct ChatUser {
var id: String
var name: String
}
var selectedUser: [ChatUser] = []
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
self.selectedUser.append(self.users[indexPath.row])
selectedUser.forEach { (user) in
print("SELECTD \(user.id)")
}
}
func tableView(_ tableView: UITableView, didDeselectRowAt indexPath: IndexPath) {
if self.selectedUser.contains(self.users[indexPath.row]) {
let myIndex = self.selectedUser.index(of: self.users[indexPath.row])
self.selectedUser.remove(at: myIndex!)
}
}
Это работает, но у меня есть панель поиска в моем навигационном контроллере, когда я нажимаю панель поиска, выбранные галочки исчезают, и если я выберу ее там и закрою панель поиска, галочки тоже исчезнут.
Я сделал только обычную ячейку для строки в индексном пути, чтобы отображать всех пользователей, когда они находятся в форме поиска.
@King, тогда вам нужно поставить bool для выбора, если это правда, а затем показать выбор в этой ячейке
как это сделать?
@King создает одну логическую переменную в структуре, меняя ее значение при выборе и отмене выбора.
Давайте продолжить обсуждение в чате.
Можете ли вы поделиться своей моделью ChatUSer?