Expand/collapse section in UITableView in iOS

前端 未结 17 768
野的像风
野的像风 2020-11-22 08:49

Could somebody tell me the way to perform UITableView expandable/collapsible animations in sections of UITableView as below?

<

17条回答
  •  盖世英雄少女心
    2020-11-22 09:27

    You have to make your own custom header row and put that as the first row of each section. Subclassing the UITableView or the headers that are already there will be a pain. Based on the way they work now, I am not sure you can easily get actions out of them. You could set up a cell to LOOK like a header, and setup the tableView:didSelectRowAtIndexPath to manually expand or collapse the section it is in.

    I'd store an array of booleans corresponding the the "expended" value of each of your sections. Then you could have the tableView:didSelectRowAtIndexPath on each of your custom header rows toggle this value and then reload that specific section.

    - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
        if (indexPath.row == 0) {
            ///it's the first row of any section so it would be your custom section header
    
            ///put in your code to toggle your boolean value here
            mybooleans[indexPath.section] = !mybooleans[indexPath.section];
    
            ///reload this section
            [self.tableView reloadSections:[NSIndexSet indexSetWithIndex:indexPath.section] withRowAnimation:UITableViewRowAnimationFade];
        }
    }
    

    Then set numberOfRowsInSection to check the mybooleans value and return 1 if the section isn't expanded, or 1+ the number of items in the section if it is expanded.

    - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    
        if (mybooleans[section]) {
            ///we want the number of people plus the header cell
            return [self numberOfPeopleInGroup:section] + 1;
        } else {
            ///we just want the header cell
            return 1;
        }
    }
    

    Also, you will need to update cellForRowAtIndexPath to return a custom header cell for the first row in any section.

提交回复
热议问题