我按照 Simon Lee 的动画 uitableview 高度变化教程进行操作,效果非常好!我似乎面临的唯一问题是我可以点击几个单元格,并且无论另一个单元格是否已经展开,它们都将保持展开状态。我只希望在任何给定时间扩展一个,如果另一个已经扩展,则在新扩展之前将其关闭。
Simon 提到我们应该“将单个 NSIndexPath 存储为当前选定项,而不是存储在索引数组中”。我不完全确定如何做到这一点。如果有人能帮忙,那就太棒了!
我按照 Simon Lee 的动画 uitableview 高度变化教程进行操作,效果非常好!我似乎面临的唯一问题是我可以点击几个单元格,并且无论另一个单元格是否已经展开,它们都将保持展开状态。我只希望在任何给定时间扩展一个,如果另一个已经扩展,则在新扩展之前将其关闭。
Simon 提到我们应该“将单个 NSIndexPath 存储为当前选定项,而不是存储在索引数组中”。我不完全确定如何做到这一点。如果有人能帮忙,那就太棒了!
你所要做的就是在下面的 tableView 委托方法中添加下面的tableView:didSelectRowAtIndexPath:
代码
[selectedIndexes setObject:selectedIndex forKey:indexPath];
要添加的代码
NSArray *key = selectedIndexes.allKeys;
for (int i = 0; i < [key count]; i++) {
if (![[key objectAtIndex:i] isEqual:indexPath]) {
[selectedIndexes setObject:[NSNumber numberWithBool:NO] forKey:[key objectAtIndex:i]];
}
}
快乐编码 :) 享受这一天!
是的,您可以使用 UITableView -(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 和 - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath 的委托方法折叠单元格: -
首先声明变量获取indexPath
NSIndexPath *selectedCellIndexPath;
然后在 didSelectRowAtIndexPath 中获取单元格的 indexPath :-
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
selectedCellIndexPath=indexPath;
[tableView reloadRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationBottom];
}
然后进行折叠和延伸并设置上下高度:-
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
if(selectedCellIndexPath != nil
&& [selectedCellIndexPath compare:indexPath] == NSOrderedSame)
return yourCellsExtendedHeightInInteger;
return yourCellsCollapsedHeightInInteger;
}
或使用
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
if(selectedCellIndexPath && indexPath.row == selectedCellIndexPath .row)
{
return 100;
}
return 44;
}
您还可以查看本教程:-