注意,我只是在学习 iOS 开发的技巧。我有一个 TableView,它使用一个自定义 Cell 来切换它的高度,以产生一个“抽屉”的影响,当你选择它时它会下降。我几乎让它完全正常工作,但我有一个非常奇怪的问题。选择索引行大于 12 的任何单元格都不会更改高度。这是一个演示视频。- http://d.chend.me/4NMU
我认为,我正在以一种非常标准的方式初始化我的自定义单元格。
static NSString *CellIdentifier = @"DrawerCell";
NSDictionary *clip = self.isFiltered ? [self.filteredClips objectAtIndex:indexPath.row] : [self.clips objectAtIndex:indexPath.row];
DrawerCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[[NSBundle mainBundle] loadNibNamed:CellIdentifier owner:self options:nil] objectAtIndex:0];
}
我的 heightForRowAtIndexPath 委托方法如下所示:
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
if(self.selectedIndex == [NSNumber numberWithInt:indexPath.row])
{
return 126.0f;
}
else {
return 60.0f;
}
}
然后对于 didSelectRowAtIndexPath
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
[self.tableView deselectRowAtIndexPath:indexPath animated:NO];
if(self.selectedIndex == [NSNumber numberWithInt:indexPath.row])
{
self.selectedIndex = nil;
[tableView beginUpdates];
[tableView endUpdates];
NSLog(@"Selected Index: %@\nIndex Path Row: %i\n\n", self.selectedIndex, indexPath.row);
return;
}
//First we check if a cell is already expanded.
//If it is we want to minimize make sure it is reloaded to minimize it back
if(self.selectedIndex != nil)
{
self.selectedIndex = [NSNumber numberWithInt:indexPath.row];
[tableView beginUpdates];
[tableView endUpdates];
NSLog(@"Selected Index: %@\nIndex Path Row: %i\n\n", self.selectedIndex, indexPath.row);
return;
}
//Finally set the selected index to the new selection and reload it to expand
self.selectedIndex = [NSNumber numberWithInt:indexPath.row];
[tableView beginUpdates];
[tableView endUpdates];
NSLog(@"Selected Index: %@\nIndex Path Row: %i\n\n", self.selectedIndex, indexPath.row);
}
有什么明显的原因为什么索引行大于 12 不能正常工作,而它们之前的所有内容都可以正常工作?顺便说一句,他们仍在接收触摸事件,并记录正确的索引路径行,他们只是不会显示抽屉。