2015-05-07 6 views
1

Я создал 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() 
} 
+0

В вашем «didSelectRowAtIndexPath» есть странный момент: в одной ветке, если вы используете 'as!' Operator и 'as' в другом. – kelin

ответ

0

Я сделал это в объективе c. Я также использовал uisearchview Controller. Я использую этот код. cellSelected - это непременный массив. Используйте этот код в методе didSelect таблицы View.

если (Tableview == self.searchDisplayController.searchResultsTableView) {

 if ([self.cellSelected containsObject:[self.searchArray objectAtIndex:indexPath.row][@"id"]]) 
     { 
      [self.cellSelected removeObject:[self.searchArray objectAtIndex:indexPath.row][@"id"]]; 


     } 
     else 
     { 
     [self.cellSelected addObject:[self.searchArray objectAtIndex:indexPath.row][@"id"]]; 

       [self.selectedCategoryArray addObject:getSelectedCategory]; 
     } 
    } 

после этого использовать этот код в методе cellforrowatindexpath

if (tableView == self.searchDisplayController.searchResultsTableView) 
    { 
     NSLog(@"self.searchArray..%@",self.searchArray); 
     titleName.text = [self.searchArray objectAtIndex:indexPath.row][@"name"]; 
     if ([self.cellSelected containsObject:[self.searchArray objectAtIndex:indexPath.row][@"id"]]) 
     { 
      cell.accessoryType = UITableViewCellAccessoryCheckmark; 
     } 
     else 
     { 
      cell.accessoryType = UITableViewCellAccessoryNone; 
     } 
    } 

В приведенном выше коде сделать еще и использовать фактический массив , Надеюсь, что это поможет вам. Спасибо

+0

Разница заключается в том, что я использую пользовательский объект, и вы этого не делаете, потому что я не могу использовать containsObject –