Ios 在表视图中单击2单元格时,自动折叠1单元格

Ios 在表视图中单击2单元格时,自动折叠1单元格,ios,uitableview,ipad,tableviewcell,Ios,Uitableview,Ipad,Tableviewcell,我已经编写了展开和折叠的代码,这里我的问题是,在表视图中,当我单击第一个单元格时,它正在正确展开,但当我单击第二个单元格时,第一个单元格会自动折叠。 我的代码是 -(NSInteger)节数表视图:(UITableView*)表视图 { 返回1; } -(NSInteger)表视图:(UITableView*)表视图行数节:(NSInteger)节 { if(isFilter) { 返回[searchArray count]; } 其他的 返回[应答计数]; } -(UITableViewCe

我已经编写了展开和折叠的代码,这里我的问题是,在表视图中,当我单击第一个单元格时,它正在正确展开,但当我单击第二个单元格时,第一个单元格会自动折叠。 我的代码是

-(NSInteger)节数表视图:(UITableView*)表视图
{
返回1;
}
-(NSInteger)表视图:(UITableView*)表视图行数节:(NSInteger)节
{
if(isFilter)
{
返回[searchArray count];
}
其他的
返回[应答计数];
}
-(UITableViewCell*)tableView:(UITableView*)tableView cellForRowAtIndexPath:(NSIndexPath*)indexPath
{
UITableViewCell*单元格=[tableView dequeueReusableCellWithIdentifier:@“Content1]”;
如果(!单元格)
{
cell=[[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault重用标识符:@“Content1”];
}
UILabel*namelab=(UILabel*)[带标记的单元格视图:1];
UILabel*状态=(UILabel*)[带标记的单元格视图:2];
UILabel*状态=(UILabel*)[带标记的单元格视图:4];
UILabel*序列号=(UILabel*)[带标记的单元格视图:8];
UILabel*公司=(UILabel*)[带标记的单元格视图:5];
UIView*aview=(UIView*)[cell.contentView-viewWithTag:10];
if(isFilter)
{
serialNo.text=[NSString stringWithFormat:@“%@”,[[searchArray objectAtIndex:indexPath.row]valueForKey:@“作业id”];
namelab.text=[[searchArray objectAtIndex:indexPath.row]valueForKey:@“维护友好的名称”];
state.text=[[searchArray objectAtIndex:indexath.row]valueForKey:@“site_id”];
status.text=[[searchArray objectAtIndex:indexPath.row]valueForKey:@“维护状态”];
company.text=[[searchArray objectAtIndex:indexath.row]valueForKey:@“orgname”];
}
其他的
{
serialNo.text=[NSString stringWithFormat:@“%@”,[[responceArray objectAtIndex:indexPath.row]valueForKey:@“作业id”];
namelab.text=[[responceArray objectAtIndex:indexPath.row]valueForKey:@“维护友好的名称”];
state.text=[[responceArray objectAtIndex:indexath.row]valueForKey:@“site_id”];
status.text=[[responceArray objectAtIndex:indexath.row]valueForKey:@“维护状态”];
company.text=[[responceArray objectAtIndex:indexath.row]valueForKey:@“orgname”];
}
//可供选择的背景色以实现更好的分割;)
if(indexath.row%2==1)
cell.backgroundColor=[UIColor COLOR WITHRED:.9绿色:.9蓝色:.9阿尔法:1];
其他的
cell.backgroundColor=[UIColor COLOR WITHRED:.8绿色:.8蓝色:.8阿尔法:1];
//name.text=[cellTitles对象索引:indexath.row];

如果(IsTagSexanded==YES&&isSelectedRowIndex==indexPath.row){ cell.contentView.frame=CGRectMake(0,0,self.view.frame.size.width,160); aview.backgroundColor=[UIColor lightGrayColor]; [cell.contentView viewWithTag:3].transform=CGAffineTransformMakeRotation(0); }否则{ cell.contentView.frame=CGRectMake(0,0,self.view.frame.size.width,160); aview.backgroundColor=[UIColor color withred:1.00绿色:1.00蓝色:1.00阿尔法:1.0]; } 返回单元; } -(CGFloat)tableView:(UITableView*)表视图行高度索引路径:(NSIndexPath*)索引路径{
if(ISTAGSExampled&&isSelectedRowIndex==indexPath.row){ 返回160; }否则{ 返回75; } 返回0; } -(void)tableView:(UITableView*)tableView未选择RowatineXpath:(NSIndexPath*)indexPath{
如果(!ISTAGSEXPANDED){
ISTAGSEXPANDED=是; isSelectedRowIndex=indexath.row; }否则{
ISTAGSEXPANDED=否; } [[u collapeExpandUITBV reloadData];
}
确认此属性是单个单元格属性或整个表属性。

这是因为您的
IsTagSexanded
isSelectedRowIndex
属性对于整个类来说似乎是公共的或单一的,所以如果您选择一次任何行,那么
if
部分将被执行,并且您的
istagsexanded
设置为
YES
,重新加载表格时,它将根据您的数据源和委托方法展开。现在,当您第二次选择任何单元格时,
istagsexanded
设置为
NO
并重新加载表格集tableview而不展开行


因此,无论何时使用tap单元格,并且您正在设置
isSelectedRowIndex
并重新加载表,这意味着
cellforrow
设置单元格仅在
isSelectedRowIndex
处展开,并且所有其他单元格由于
如果(Istagsexanded==YES&&isSelectedRowIndex==indexath.row)
此条件而设置为折叠状态。当
isSelectedRowIndex==indexPath.row
变为true时,只有单元格将展开

所以,如果您想保持扩展单元格的扩展,那么您应该为扩展单元格管理
indepath
数组。在
cellforrowatinexpath
heightforrow集合中
扩展帧和160高度
,用于该数组的每个索引路径(选定索引路径或选定行或扩展单元格的数组)

您可以得到indexpath数组,类似于

   NSArray *arr = [yourTableView indexPathsForSelectedRows];

由于
isSelectedRowIndex
属性,您的第一个单元格被禁用。一次,这将只保存一个索引,因此只有一个单元格将显示为展开,其余单元格将按照代码折叠

根据您的要求,需要维护一个选定单元格索引数组。下面是可能对您有所帮助的代码

在ViewController.h文件中(或在类别定义中的ViewController.m文件中)

在ViewController.m文件中:

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{

   if (selectedCellIndexes == nil) {
      selectedCellIndexes = [[NSMutableArray alloc] init];
   }

   if(![selectedCellIndexes containsObject:[NSNumber numberWithInteger:indexPath.row]])
    {
        [selectedCellIndexes addObject:[NSNumber numberWithInteger:indexPath.row]];  // add if it does not exist
    }
    else
    {
        [selectedCellIndexes removeObject:[NSNumber numberWithInteger:indexPath.row]];  // remove if it exists
    }
    [tableView reloadData];  // redraw all cell again
}

-(UITableViewCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
   // Cell alloc - init data here
   ...
   ...

   if(selectedCellIndexes && [selectedCellIndexes containsObject:[NSNumber numberWithInteger:indexPath.row]])    
   {
      // expanded cell code here
   }
   else {
      // collapsed cell code here
   }
   return cell;
}

-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{  
   int rowHeight = 0;
   if(selectedCellIndexes && [selectedCellIndexes containsObject:[NSNumber numberWithInteger:indexPath.row]]) 
        rowHeight = EXPANDED_CELL_HEIGHT; // define this value as constants 
   }
   else 
   {     
      rowHeight = COLLAPSED_CELL_HEIGHT; // define this value as constants 
   }
   return rowHeight;
}

希望这能有所帮助。

请正确解释此处的问题所在,是否要求第一个单元格在第二个单元格上折叠
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{

   if (selectedCellIndexes == nil) {
      selectedCellIndexes = [[NSMutableArray alloc] init];
   }

   if(![selectedCellIndexes containsObject:[NSNumber numberWithInteger:indexPath.row]])
    {
        [selectedCellIndexes addObject:[NSNumber numberWithInteger:indexPath.row]];  // add if it does not exist
    }
    else
    {
        [selectedCellIndexes removeObject:[NSNumber numberWithInteger:indexPath.row]];  // remove if it exists
    }
    [tableView reloadData];  // redraw all cell again
}

-(UITableViewCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
   // Cell alloc - init data here
   ...
   ...

   if(selectedCellIndexes && [selectedCellIndexes containsObject:[NSNumber numberWithInteger:indexPath.row]])    
   {
      // expanded cell code here
   }
   else {
      // collapsed cell code here
   }
   return cell;
}

-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{  
   int rowHeight = 0;
   if(selectedCellIndexes && [selectedCellIndexes containsObject:[NSNumber numberWithInteger:indexPath.row]]) 
        rowHeight = EXPANDED_CELL_HEIGHT; // define this value as constants 
   }
   else 
   {     
      rowHeight = COLLAPSED_CELL_HEIGHT; // define this value as constants 
   }
   return rowHeight;
}