0

さまざまなセクションと行を使用してプログラムでテーブルを作成し、写真をボックスとしてテーブル内にチェックボックスを作成します

このチェックボックスに制限をつけたい

助けてくれませんか

編集 :

私の質問は、チェックボックスを1つだけ選択する方法です-選択の制限

また、ボックスの選択を解除してチェックマークを削除するにはどうすればよいですか

ここにチェックボックス行のコードがあります

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{
    NSString *key = [[self sectionKeys] objectAtIndex:[indexPath section]];
    NSArray *contents = [[self sectionContents] objectForKey:key];
    NSString *contentForThisRow = [contents objectAtIndex:[indexPath row]];

    if (indexPath.section != 2) {
        UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell"];
        cell.textLabel.text =contentForThisRow;
        return cell;
    }
    else {
        CheckBoxAbsenceTableViewCell *cell = (CheckBoxAbsenceTableViewCell*)[tableView dequeueReusableCellWithIdentifier:@"CheckBoxAbsenceTableViewCell"];

        cell.imageView.image=[UIImage imageNamed:@"emptycheck-box.png"];
        cell.checkBox.image = image;
        if(indexPath.row == 0){
            cell.absenceCode.text =@"Red";
        }
        else if (indexPath.row == 1){
            cell.absenceCode.text =@"Green";

        }else if(indexPath.row == 2){
            cell.absenceCode.text =@"Blue";
        }
        return cell;
    }
}  

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
  {
      CheckBoxAbsenceTableViewCell *selectedCell = [tableView cellForRowAtIndexPath:indexPath];
      selectedCell.checkBox.image =[UIImage imageNamed:@"checkmark.png"];
  }

前もって感謝します!

4

2 に答える 2

0

UIInteger _selectedIndex簡単な解決策は、View Controller にインスタンス変数を追加することです。
viewDidLoad で -1 に設定します (行が選択されていません)
次に、ユーザーがセルを選択すると、選択したインデックスが保存され、tableView が再読み込みされます。

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
  {  
      _selectedIndex = indexPath.row;
      [self.tableView reloadData];
  }  

メソッドを変更してcellForRowAtIndexPath、選択したセルのみを選択するようにします。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{
    NSString *key = [[self sectionKeys] objectAtIndex:[indexPath section]];
    NSArray *contents = [[self sectionContents] objectForKey:key];
    NSString *contentForThisRow = [contents objectAtIndex:[indexPath row]];

    if (indexPath.section != 2) {
        UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell"];
        cell.textLabel.text =contentForThisRow;
        return cell;
    }
    else {
        CheckBoxAbsenceTableViewCell *cell = (CheckBoxAbsenceTableViewCell*)[tableView dequeueReusableCellWithIdentifier:@"CheckBoxAbsenceTableViewCell"];

        if (indexPath.row == _selectedIndex) {
            cell.checkBox.image =[UIImage imageNamed:@"checkmark.png"];
        }
        else {
            cell.checkBox.image = [UIImage imageNamed:@"emptycheck-box.png"];;
        }


        if(indexPath.row == 0){
            cell.absenceCode.text =@"Red";
        }
        else if (indexPath.row == 1){
            cell.absenceCode.text =@"Green";

        }else if(indexPath.row == 2){
            cell.absenceCode.text =@"Blue";
        }
        return cell;
    }
} 
于 2012-08-09T20:56:41.480 に答える
0

UI デザインの観点からは、cell.accessoryType と UITableViewCellAccessoryCheckmark アクセサリを使用する必要があります。

データ モデルで選択された (チェックされた) indexPath を追跡する必要があります。これを self.idxPathSelected と呼びましょう。

この didSelectRowAtIndexPath は、選択した行にチェックマークを追加し、以前に選択した行からチェックマークをクリアします。

- (void) tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
 [tableView deselectRowAtIndexPath:indexPath animated:NO];
 UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
 cell.accessoryType = UITableViewCellAccessoryCheckmark;

 if (self.idxPathSelected != nil)
 {
  cell = [tableView cellForRowAtIndexPath:self.idxPathSelected];
  cell.accessoryType = UITableViewAccessoryNone;
 }

 self.idxPathSelected = [NSIndexPath indexPathForRow:indexPath.row inSection:indexPath.section];

}

そしてあなたのcellForRowAtIndexPathでは、次のようなものです:

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

 if ((self.idxPathSelected != nil) && ([self.idxPathSelected compare:indexPath] == NSOrderedSame))
  cell.accessoryType = UITableViewCellAccessoryCheckmark;
 else
  cell.accessoryType = UITableViewCellAccessoryNone;
...
}
于 2012-08-09T18:56:20.063 に答える