gpt4 book ai didi

ios - 带有复选标记的 UITableViewCell,复制复选标记

转载 作者:行者123 更新时间:2023-11-28 18:26:17 25 4
gpt4 key购买 nike

到目前为止,在 Stack Overflow 上搜索时,我还没有找到与我相似的情况。非常感谢任何帮助:我一直看到,如果我在人 A 上打勾,人 H 也会有一个,还有一个人大约 10 远。基本上每隔 10 个它就会重复一个复选标记。

这是我的代码:

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

{static NSString *CellIdentifier = @"MyCell";

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier] autorelease];

}

cell.textLabel.text =

[NSString stringWithFormat:@"%@ %@", [[myArrayOfAddressBooks objectAtIndex:indexPath.row] objectForKey:@"FirstName"],[[myArrayOfAddressBooks objectAtIndex:indexPath.row] objectForKey:@"LastName"]];
cell.detailTextLabel.text =

[NSString stringWithFormat:@"%@", [[myArrayOfAddressBooks objectAtIndex:indexPath.row] objectForKey:@"Address"]];

return cell;

在我为索引路径选择的行中,我有这个:

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

if ([[myArrayOfAddressBooks objectAtIndex:indexPath.row] objectForKey:@"emailSelected"] != @"YES")
{
cell.accessoryType = UITableViewCellAccessoryCheckmark;
[[myArrayOfAddressBooks objectAtIndex:indexPath.row] setValue:@"YES" forKey:@"emailSelected"];
}
else
{
cell.accessoryType = UITableViewCellAccessoryNone;
[[myArrayOfAddressBooks objectAtIndex:indexPath.row] setValue:@"NO" forKey:@"emailSelected"];
}

最佳答案

这是由于 UITableView 如何“回收”UITableViewCell 以提高效率,以及您如何在单元格被选中时对其进行标记。

您需要为在 tableView:cellForRowAtIndexPath: 中处理/创建的每个单元格刷新/设置 accessoryType 值。您正确更新了 myArrayOfAddressBooks 数据结构中的状态,您只需要在 tableView:cellForRowAtIndexPath:

中使用此信息
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

{
static NSString *CellIdentifier = @"MyCell";

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier] autorelease];
}

NSDictionary *info = [myArrayOfAddressBooks objectAtIndex:indexPath.row];

cell.textLabel.text = [NSString stringWithFormat:@"%@ %@", [info objectForKey:@"FirstName"],[info objectForKey:@"LastName"]];
cell.detailTextLabel.text = [NSString stringWithFormat:@"%@", [info objectForKey:@"Address"]];

cell.accessoryType = ([[info objectForKey:@"emailSelected"] isEqualString:@"YES"]) ? UITableViewCellAccessoryCheckmark : UITableViewCellAccessoryNone;

return cell;
}

此外,除非有充分的理由将状态保存为 @"Yes"@"No" 字符串,否则为什么不将它们保存为 [ NSNumber numberWithBool:YES] 还是 [NSNumber numberWithBool:NO]?当您想进行比较而不是一直使用 isEqualToString: 时,这将简化您的逻辑。

例如

    cell.accessoryType = ([[info objectForKey:@"emailSelected"] boolValue]) ? UITableViewCellAccessoryCheckmark : UITableViewCellAccessoryNone;

关于ios - 带有复选标记的 UITableViewCell,复制复选标记,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8556590/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com