所以我有一个非常奇怪的问题。我的代码在iOS 8上运行良好但在iOS 7上没有用,我无法弄清楚原因。
我有一个tableview,其中包含一个项目列表,当您选择项目时,该项目会添加一个复选标记,如果再次选中该项目,则会删除复选标记。很简单吧? :-p就像我说它在iOS 8上运行得很好,但是当我在iOS 7.1上运行时,单元格突出显示,添加一个复选标记,并删除旧标题并将其替换为默认的标题。之后,无论我点击单元格多少次,它都不会改变(但基础数据确实会发生变化)。
选择之前
选择之后
如果我离开屏幕并返回屏幕,则会正确显示行。我已经验证正在调用cellForRowAtIndexPath并且正在将值添加到单元格中。
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
// Return the number of sections.
return 1;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
// Return the number of rows in the section.
return [[parkFinderSingleton.data valueForKey:@"amenities"] count];
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"amenityFilterCell" forIndexPath:indexPath];
Amenity *currentAmenity;
NSArray *amenities = [parkFinderSingleton.data valueForKey:@"amenities"];
if (amenities != nil) {
currentAmenity = amenities[indexPath.row];
cell.textLabel.text = currentAmenity.amenityTitle;
NSLog(@"Cell Title %@", cell.textLabel.text);
if (currentAmenity.amenitySelected) {
cell.accessoryType = UITableViewCellAccessoryCheckmark;
} else {
cell.accessoryType = UITableViewCellAccessoryNone;
}
}
return cell;
}
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
UITableViewCell *cell = [self.tableView dequeueReusableCellWithIdentifier:@"amenityFilterCell" forIndexPath:indexPath];
Amenity *currentAmenity;
NSArray *amenities = [parkFinderSingleton.data valueForKey:@"amenities"];
if (amenities != nil) {
currentAmenity = amenities[indexPath.row];
if (currentAmenity.amenitySelected) {
currentAmenity.amenitySelected = NO;
cell.accessoryType = UITableViewCellAccessoryNone;
} else {
currentAmenity.amenitySelected = YES;
cell.accessoryType = UITableViewCellAccessoryCheckmark;
}
}
[self.tableView beginUpdates];
[self.tableView reloadRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationNone];
[self.tableView endUpdates];
}
有关可能发生的事情的任何想法?
答案 0 :(得分:2)
通常情况下,不应在dequeueReusableCellWithIdentifier:forIndexPath:
中调用tableView: didSelectRowAtIndexPath:
。如果您想要特定indexPath的单元格,请使用[tableView cellForRowAtIndexPath:indexPath]
。
对于:
[self.tableView beginUpdates]; [self.tableView reloadRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationNone]; [self.tableView endUpdates];
如果您只想取消选择单元格,请使用[tableView deselectRowAtIndexPath:animated:]
。