Я создал UITableView
, который содержит список команд, у которых есть аксессуары. Этот аксессуар показывает, выбрана ли ячейка или нет. Каждая ячейка связана с пользовательским объектом в моем классе Team
.Выбор нескольких ячеек с поиском
Когда ячейка выбрана, она сохраняет конкретный объект команды в массиве teamSelected.
Все это прекрасно работает. Однако, похоже, проблема при поиске, а затем фильтрация данных и выбор ячейки, кажется, что она добавляет неправильный объект и изменяет принадлежность accessView на неправильном объекте?
Как это сделать, чтобы не добавлять правильный объект при выборе ячейки при активном поиске?
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("teamCell", forIndexPath: indexPath) as! TeamCell
if (self.teamSearchController.active) {
cell.textLabel?.text = filteredTableData[indexPath.row].name
} else {
cell.textLabel?.font = UIFont(name: "HelveticaNeue-Light", size: 20)
cell.textLabel?.text = self.teamArray[indexPath.row].name as String
}
let team = self.teamArray[indexPath.row] as Team
var removed = false
for (index, value) in enumerate(self.teamSelected) {
if (value.id == team.id) {
cell.accessoryView = cell.accessoryCheck
removed = true
}
}
if (!removed) {
cell.accessoryView = cell.accessoryUncheck
}
cell.selectionStyle = UITableViewCellSelectionStyle.None
return cell
}
override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
tableView.deselectRowAtIndexPath(indexPath, animated: true)
if (self.teamSearchController.active) {
team = self.filteredTableData[indexPath.row] as! Team
removed = false
} else {
team = self.teamArray[indexPath.row] as Team
removed = false
}
for (index, value) in enumerate(self.teamSelected) {
if (value.id == team.id) {
self.teamSelected.removeAtIndex(index)
removed = true
}
}
if (!removed) {
self.teamSelected.append(team)
}
var userDefaults = NSUserDefaults.standardUserDefaults()
let encodedData = NSKeyedArchiver.archivedDataWithRootObject(self.teamSelected)
userDefaults.setObject(encodedData, forKey: "teams")
userDefaults.synchronize()
tableView.reloadData()
}
В вашем «didSelectRowAtIndexPath» есть странный момент: в одной ветке, если вы используете 'as!' Operator и 'as' в другом. – kelin