2016-12-14 7 views
0

次のコードは空白のセルで始まり、セルを選択するときにチェックマークを追加しますが、ボタンを外部にタップしている間はすべてのチェックマークを削除します。どうしたらいいですか?ボタンのIBActionボタン操作のUITableViewCellチェックマークをリセットする

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 

    UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath]; 
     cell.accessoryType = UITableViewCellAccessoryNone; 

    if (indexPath.section == 0) { 

    switch (indexPath.row) { 
     case 0: 
      [email protected]"1"; 
      cell.accessoryType = UITableViewCellAccessoryCheckmark; 
      break; 
     case 1: 
      [email protected]"2"; 
      cell.accessoryType = UITableViewCellAccessoryCheckmark; 
      break; 
     case 2: 
      [email protected]"3"; 
      cell.accessoryType = UITableViewCellAccessoryCheckmark; 
      break; 
     case 3: 
      [email protected]"4"; 
      cell.accessoryType = UITableViewCellAccessoryCheckmark; 
      break; 
     case 4: 
      [email protected]"5"; 
      cell.accessoryType = UITableViewCellAccessoryCheckmark; 
      break; 
     default: 
      break; 
     } 
    } 
} 
+0

たとえば、 'text'と' selected'のようなモデルを使用します。 'cellForRowAtIndexPath'にラベルテキストとアクセサリビューをそれに応じて設定します。何かを変更するには、**モデル**で行い、行またはテーブルビューをリロードします。 – vadian

答えて

1

テーブルをリロードしてcellForRowAtIndexPath書き込みcell.accessoryType = UITableViewCellAccessoryNone;インチ

0

新しい場合は、選択したインデックスに対してNSMutableArrayを管理するのが最も簡単なソリューションです。

すべてオン選択したインデックスパスが既にアレイに存在するかどうかを確認しますか?

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 

if([selectedArray containsObject:indexPath]){ 
//Your cell is already selected then unselect it 
[selectedArray removeObject:indexPath]; 

} 
else{ 
//Add object to indexpath 
    [selectedArray addObject:indexPath]; 
} 

[tableView reloadRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationNone]; 

} 

これは、あなたは以下のコードを試してみてください、アレイからすべての項目を削除し、セルをリロードするすべてのチェックマークを外したり

[YOUR_TABLEVIEW reloadRowsAtIndexPaths:[tableView indexPathsForVisibleRows] withRowAnimation:UITableViewRowAnimationNone]; 
0

したい場合は、あなたのcellForRowAtIndexPathが

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ 

     UITableViewCell* cell = [tableView dequeueReusableCellWithIdentifier:@"YOUR_ID" forIndexPath:indexPath]; 
     [cell setAccessoryType: UITableViewCellAccessoryNone]; 
     if ([selectedArray containsObject:indexPath]){ 
      [cell setAccessoryType: UITableViewCellAccessoryCheckmark]; 
     } 
     return cell; 

    } 

になりますです。、フラグ値を使用して、以前にクリックされたインデックス行を更新するだけです。それが助けてくれることを願う

@interface ViewController() 
{ 
    int previousClickedIndex; //To save previous clicked row 
} 

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view, typically from a nib. 

    previousClickedIndex = -1; //Initialize with a negative value 
} 

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 

    UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath]; 
    cell.accessoryType = UITableViewCellAccessoryNone; 

    if (indexPath.section == 0) { 

     if(previousClickedIndex>-1) 
     { 

      UITableViewCell *prevousSelectedCell = [tableView cellForRowAtIndexPath:[NSIndexPath indexPathForRow:previousClickedIndex inSection:indexPath.section]]; 
      prevousSelectedCell.accessoryType = UITableViewCellAccessoryNone; 

     } 

     switch (indexPath.row) { 
      case 0: 
      //[email protected]"1"; 
      cell.accessoryType = UITableViewCellAccessoryCheckmark; 
      break; 
      case 1: 
      //[email protected]"2"; 
      cell.accessoryType = UITableViewCellAccessoryCheckmark; 
      break; 
      case 2: 
      //[email protected]"3"; 
      cell.accessoryType = UITableViewCellAccessoryCheckmark; 
      break; 
      case 3: 
      //[email protected]"4"; 
      cell.accessoryType = UITableViewCellAccessoryCheckmark; 
      break; 
      case 4: 
      //[email protected]"5"; 
      cell.accessoryType = UITableViewCellAccessoryCheckmark; 
      break; 
      default: 
      break; 
     } 

     previousClickedIndex = indexPath.row; 
    } 
} 
関連する問題