我正在创建一个包含可展开部分的应用。我已经使用this教程实现了这一点。
但是现在我想在点击另一部分时关闭第一个扩展部分。有人可以帮我这个。
答案 0 :(得分:0)
您可以将tableView:didSelectRowAtIndexPath:
中的逻辑代码移动到新方法(switchSection
)并在展开的部分调用它以折叠它,然后展开新部分。请注意,您不再需要expandedSections
设置,因为您只展开了一个部分。
NSUInteger expandedSection; /// Define this instead of expandedSections
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
if ([self tableView:tableView canCollapseSection:indexPath.section]) {
if (!indexPath.row) {
NSInteger section = indexPath.section;
BOOL currentlyExpanded = (expandedSection == section);
/// Collapse expanded section
if (expandedSection >= 0) {
[self switchSection:expandedSection];
}
/// Expand the new section if needed
if (!currentlyExpanded) {
[self switchSection:section];
}
}
}
}
- (void)switchSection:(NSInteger)section {
BOOL currentlyExpanded = (expandedSection == section);
NSInteger rows;
NSMutableArray *tmpArray = [NSMutableArray array];
if (currentlyExpanded) {
expandedSection = -1;
rows = [self tableView:tableView numberOfRowsInSection:section];
} else {
expandedSection = section;
rows = [self tableView:tableView numberOfRowsInSection:section];
}
for (int i = 1; i < rows; i++) {
NSIndexPath *tmpIndexPath = [NSIndexPath indexPathForRow:i inSection:section];
[tmpArray addObject:tmpIndexPath];
}
UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
if (currentlyExpanded) {
[tableView deleteRowsAtIndexPaths:tmpArray withRowAnimation:UITableViewRowAnimationTop];
cell.accessoryView = [DTCustomColoredAccessory accessoryWithColor:[UIColor grayColor] type:DTCustomColoredAccessoryTypeDown];
} else {
[tableView insertRowsAtIndexPaths:tmpArray withRowAnimation:UITableViewRowAnimationTop];
cell.accessoryView = [DTCustomColoredAccessory accessoryWithColor:[UIColor grayColor] type:DTCustomColoredAccessoryTypeUp];
}
}
答案 1 :(得分:0)
Apple提供了一个示例代码。这是链接TVAnimationGestures。
但是它有一个小错误请参考post。