我有一个UITableView,其中包含30多个UITableviewCells。
我面临的问题是,当选择行并更改单元格的accessoryType时,该行的第11行也会被修改。
我已尝试打印[indexPath row]
值,但它只显示已选择的行而非另一行。
我使用以下代码:
-(UITableViewCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *simpleTableIdentifier = @"SimpleTableItem";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier];
if (cell == nil)
{
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:simpleTableIdentifier];
}
cell.textLabel.font=[UIFont fontWithName: @"Arial" size: 14.0];
cell.textLabel.lineBreakMode = NSLineBreakByWordWrapping;
.
.
.
}
请帮我解决这个问题
答案 0 :(得分:1)
你需要跟踪选中的单元格,你可以使用NSMutableDictionary作为键使用IndexPath.row并将其作为一个String值,所以在你的DidSelectRow中修改字典设置Row的值="选择&# 34;并在你的CellForRow方法中检查Dictionary [indexPath.row] ==" Selected"然后将你的配件默认删除
@interface ViewController () <UITableViewDataSource,UITableViewDelegate>
@property NSMutableDictionary * dict;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
_dict = [NSMutableDictionary dictionary];
}
-(UITableViewCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *simpleTableIdentifier = @"SimpleTableItem";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier];
if (cell == nil)
{
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:simpleTableIdentifier];
}
cell.accessoryType = UITableViewCellAccessoryNone;
if([((NSString*)[_dict objectForKey:[NSString stringWithFormat:@"%li",(long)indexPath.row]]) isEqualToString: @"Selected"])
{
cell.accessoryType = UITableViewCellAccessoryCheckmark;
}
cell.textLabel.font=[UIFont fontWithName: @"Arial" size: 14.0];
cell.textLabel.lineBreakMode = NSLineBreakByWordWrapping;
return cell;
}
在didSelectRowAtIndexPath方法
中- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
NSString * value = (NSString*)[_dict objectForKey:[NSString stringWithFormat:@"%li",(long)indexPath.row]];
if ([value isEqualToString:@"Selected"]){
[_dict setValue:@"UnSelected" forKey:value];
}else{
[_dict setValue:@"Selected" forKey:[NSString stringWithFormat:@"%li",(long)indexPath.row]];
}
[tableView reloadRowsAtIndexPaths:@[indexPath,[NSIndexPath indexPathForRow:[value integerValue] inSection:0]] withRowAnimation:UITableViewRowAnimationNone];
}
希望这有助于你