iphone表视图复选标记附件问题

时间:2010-10-21 08:28:19

标签: iphone

我有一个包含50行的表格。我想选择带有复选标记附件的特定行,但是当我选择一些行并向下滚动表格时,我会看到预先选中的行。我知道表格单元格被重用了但是我想发出这个问题我该怎么办呢?

 - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
    return 1;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
   // return [array count];
    return 50;
}

// Customize the appearance of table view cells.
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    static NSString *CellIdentifier = @"Cell";

  TableViewCell *cell = (TableViewCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];

    if (cell == nil) {
        cell = [[[TableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];

    }
    cell.textLabel.text=[NSString stringWithFormat:@"%i",[indexPath row]];
    return cell;
}

// Override to support row selection in the table view.
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {

    UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];

    if (cell.accessoryType == UITableViewCellAccessoryNone) {
        cell.accessoryType = UITableViewCellAccessoryCheckmark;

    } else {
        cell.accessoryType = UITableViewCellAccessoryNone;
    }

2 个答案:

答案 0 :(得分:2)

你必须在 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

中设置cell.accessoryType

事实是,由于您具有重用标识符,因此在请求新单元时,将复制具有标识符的单元。在最新单元格中设置了复选标记后,将复制检查掩码。

您必须存储每个单元格的状态(即在数组中)以重新创建具有正确值的单元格。

类似的东西:

BOOL values[50]; //Not the best way, but easy for the example...


- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
  static NSString *CellIdentifier = @"Cell";
  TableViewCell *cell = (TableViewCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
  if (cell == nil) {
    cell = [[[TableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
  }
  cell.textLabel.text=[NSString stringWithFormat:@"%i",[indexPath row]];
  if (value[indexPath.row]) { 
    cell.accessoryType = UITableViewCellAccessoryCheckmark;
  } else {
    cell.accessoryType = UITableViewCellAccessoryNone;
  }
  return cell;
}


- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
  UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];

  values[indexPath.row] = !value[indexPath.row];

  if (value[indexPath.row]) { 
    cell.accessoryType = UITableViewCellAccessoryCheckmark;
  } else {
    cell.accessoryType = UITableViewCellAccessoryNone;
  }
}

答案 1 :(得分:1)

你可以在数组的帮助下做一个,拿一个数组,每个数组都有一个dict在数组中做这个条件

NSMutableArray *arr = [[NSMutableArray alloc]init];
for(int i=1; i<=50;i++)
{
    NSmutableDictionary *dict = [[NSMutableDictionary alloc]init];
    [dict setobject:[nsstring stringwithformat:@"%d",i] valueForkey:@"ID"];
    [arr addobject:dict];
    [dict release];
}

现在行是[arr count]; 并将此检查放入单元格外观

NSMutabledict *dict1 = [arr objectatindex:indexpath.row];
if([[dict objectforkey:"Check"]==nil])
{
    [dict setobject:[nsstring stringwithformate:@"1"] valueforkey:@"Check"];
}else
{
if([[dict objectforkey:"Check"] isequaltostring:@"1"]
{
cell.accessoryType = UITableViewCellAccessoryNone;
}
else
{
cell.accessoryType = UITableViewCellAccessoryCheckmark;
}
}

现在将下面的代码放在didselect methood中

nsmutabledict *dict1 = [arr objectatindex:indexpath.row];
if([[dict objectforkey:"Check"] isequaltostring:@"1"]
{
[dict setobject:[nsstring stringwithformate:@"2"] valueforkey:@"Check"];
}
else
{
[dict setobject:[nsstring stringwithformate:@"1"] valueforkey:@"Check"];
}