繁体   English   中英

当tableview中有多个节时,展开/折叠表行

[英]Expand/Collapse table row when multiple number of sections in tableview

在这里我正在尝试创建扩展/折叠表row.It只在1部分中使用didSelectRowAtIndexPath中的此代码正常工作:

if (selectedIndex == indexPath.row) {
            selectedIndex = -1;
            [tableView reloadRowsAtIndexPaths:[NSArray arrayWithObjects:indexPath, nil]withRowAnimation:UITableViewRowAnimationFade];
            return;
        }

        //for table view collapse
        if (selectedIndex != -1) {
            NSIndexPath *prePath = [NSIndexPath indexPathForRow:selectedIndex inSection:0];
            selectedIndex = (int)indexPath.row;
            [tableView reloadRowsAtIndexPaths:[NSArray arrayWithObjects:prePath, nil]withRowAnimation:UITableViewRowAnimationFade];
        }

        //for non selection
        selectedIndex = (int)indexPath.row;
        [tableView reloadRowsAtIndexPaths:[NSArray arrayWithObjects:indexPath, nil]withRowAnimation:UITableViewRowAnimationFade];

通过此代码,我可以展开和折叠表格行,但是当且仅当表格中的1个部分可使用,但当有多个部分出现时,它将展开每个部分的特定行。因此,当我单击第0部分的第1行时,它将打开所有部分的第1行行。 如何摆脱这种情况?

点击特定部分的按钮,您可以更改行数。

在剖面视图中,您为所有剖面添加了一个按钮,点击时具有常用方法。

在攻丝方法中,您只需要更改特定部分的布尔变量值

    ex.. if sender tag you initials with section number. 
    So For Section 0 button is taped then in tapping method
     if sender.tag == 0  
   { 
       if section0tag
       {
        section0tag = false
       }
       else
       {
        section0tag = true 
       }
      table.reload() ..//Which call number of rows at section data source method
  }

 For number of rowsatSection method data source method

 if section == 0
   {
      if section0tag
        {
            return 5 //Expanding rows
        }
     else
       {
            return  0 //collapsing rows
       }
   }   

尝试此方法,只需重新加载tableview(即rOne,rTwo等是bool值):

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    if (section == 0) {
        return rOne ? oneRoundType.count : 0 ;
    }else if (section ==1) {
        return rTwo ? twoRoundType.count : 0 ;
    }else if (section ==2) {
        return rThree ? threeRoundType.count : 0 ;
    }else if (section ==3) {
        return rFour ? fourRoundType.count : 0 ;
    }else if (section ==4) {
        return rFive ? fiveRoundType.count : 0 ;
    }
    return 0;
}

请尝试以下代码:

sectionIndexToBeExpanded的全局声明为int,以检查是否已扩展

int sectionIndexToBeExpanded;

-(void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];

   //Assign value 100 to sectionIndexToBeExpanded, if you do not want row expanded 
    sectionIndexToBeExpanded = 100;
}

#pragma mark - Table view data source

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    return [yourArray count];    
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    if (sectionIndexToBeExpanded==100)  //If not expanded
    {
        return 1;
    }
    else if (sectionIndexToBeExpanded==section) //If section expand add one more row
    {
        return 2;
    }
    else
        return 1;
}

#pragma mark - Table view delegate

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    if (indexPath.row==0)
    {
        if (sectionIndexToBeExpanded==100)    //If section not expanded set value of sectionIndexToBeExpanded to 100
        {
            UITableViewCell *cell=(UITableViewCell*)[tableView cellForRowAtIndexPath:indexPath];

            [tableView beginUpdates];

            [tableView insertRowsAtIndexPaths:@[[NSIndexPath indexPathForRow:indexPath.row+1 inSection:indexPath.section]] withRowAnimation:UITableViewRowAnimationRight];
            sectionIndexToBeExpanded=(int)indexPath.section;

            [tableView endUpdates];

        }
        else if (sectionIndexToBeExpanded==indexPath.section)   // If Section is already expanded at indexpath then collapse ie. delete row
        {
            UITableViewCell *cell=(UITableViewCell*)[tableView cellForRowAtIndexPath:indexPath];

             [tableView beginUpdates];

            [tableView deleteRowsAtIndexPaths:@[[NSIndexPath indexPathForRow:indexPath.row+1 inSection:sectionIndexToBeExpanded]] withRowAnimation:UITableViewRowAnimationLeft];
            sectionIndexToBeExpanded=100;  //Set section to not expanded

            [tableView endUpdates];
        }
        else   //Expand section
        {
            UITableViewCell *cell=(UITableViewCell*)[tableView cellForRowAtIndexPath:indexPath];
            [tableView beginUpdates];

            [tableView deleteRowsAtIndexPaths:@[[NSIndexPath indexPathForRow:indexPath.row+1 inSection:sectionIndexToBeExpanded]] withRowAnimation:UITableViewRowAnimationLeft];

            //set value of expanded section to sectionIndexToBeExpanded
            sectionIndexToBeExpanded=(int)indexPath.section;

            [tableView insertRowsAtIndexPaths:@[[NSIndexPath indexPathForRow:indexPath.row+1 inSection:indexPath.section]] withRowAnimation:UITableViewRowAnimationLeft];

            [tableView endUpdates];

        }

    }

}

-(CGFloat)tableView:(UITableView *)tableView estimatedHeightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    return 44;
}

-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    return UITableViewAutomaticDimension;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM