我已经编写了扩展和折叠的代码,这里我的问题是,在表格视图中,当我点击第一个单元格时,它正在正确扩展,但是当我点击第二个单元格时,自动第一个单元格正在折叠。 我的代码是
-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
return 1;
}
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
if(isFilter)
{
return [searchArray count];
}
else
return [responceArray count];
}
-(UITableViewCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell *cell=[tableView dequeueReusableCellWithIdentifier:@"Content1"];
if(!cell)
{
cell=[[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"Content1"];
}
UILabel *namelab = (UILabel *)[cell viewWithTag:1];
UILabel *state = (UILabel *)[cell viewWithTag:2];
UILabel *status = (UILabel *)[cell viewWithTag:4];
UILabel *serialNo=(UILabel *)[cell viewWithTag:8];
UILabel *company = (UILabel *)[cell viewWithTag:5];
UIView *aview=(UIView *)[cell.contentView viewWithTag:10];
if(isFilter)
{
serialNo.text=[NSString stringWithFormat:@"%@",[[searchArray objectAtIndex:indexPath.row] valueForKey:@"job_id"]];
namelab.text=[[searchArray objectAtIndex:indexPath.row]valueForKey:@"maintenance_friendly_name"];
state.text=[[searchArray objectAtIndex:indexPath.row]valueForKey:@"site_id"];
status.text=[[searchArray objectAtIndex:indexPath.row]valueForKey:@"maintenance_status"];
company.text=[[searchArray objectAtIndex:indexPath.row]valueForKey:@"orgname"];
}
else
{
serialNo.text=[NSString stringWithFormat:@"%@",[[responceArray objectAtIndex:indexPath.row] valueForKey:@"job_id"]];
namelab.text=[[responceArray objectAtIndex:indexPath.row]valueForKey:@"maintenance_friendly_name"];
state.text=[[responceArray objectAtIndex:indexPath.row]valueForKey:@"site_id"];
status.text=[[responceArray objectAtIndex:indexPath.row]valueForKey:@"maintenance_status"];
company.text=[[responceArray objectAtIndex:indexPath.row]valueForKey:@"orgname"];
}
//alternative background colors for better division ;)
if (indexPath.row %2 ==1)
cell.backgroundColor = [UIColor colorWithRed:.9 green:.9 blue:.9 alpha:1];
else
cell.backgroundColor = [UIColor colorWithRed:.8 green:.8 blue:.8 alpha:1];
// name.text = [cellTitles objectAtIndex:indexPath.row];
if (isTagsExapanded == 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);
}else{
cell.contentView.frame = CGRectMake(0, 0,self.view.frame.size.width,160);
aview.backgroundColor=[UIColor colorWithRed:1.00 green:1.00 blue:1.00 alpha:1.0];
}
return cell;
}
-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
if (isTagsExapanded && isSelectedRowIndex == indexPath.row) {
return 160;
}else{
return 75;
}
return 0;
}
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
if (!isTagsExapanded ) {
isTagsExapanded = YES;
isSelectedRowIndex = indexPath.row;
}else{
isTagsExapanded = NO;
}
[_collapeExpandUITBV reloadData];
}
答案 0 :(得分:1)
确认此属性是单个单元格属性或整个表格属性。
答案 1 :(得分:1)
这是因为您的isTagsExapanded
和isSelectedRowIndex
属性似乎是整个类的常见属性或单例属性,因此如果您选择任何一行,则if
部分将被执行,而isTagsExapanded
部分将被执行设置为YES
,当你的表重新加载时,它会根据你的数据源和委托方法进行扩展,当你第二次选择任何单元格然后isTagsExapanded
设置为NO
并重新加载表集tableview没有扩展行。
因此,每当使用tap单元格并且您正在设置isSelectedRowIndex
并重新加载表格cellforrow
时,表格单元格仅在isSelectedRowIndex
展开,而所有其他单元格因if (isTagsExapanded == YES && isSelectedRowIndex == indexPath.row)
而设置为折叠状态1}}这种情况。当isSelectedRowIndex == indexPath.row
在那时变为真时,只有你的细胞会膨胀。
因此,如果您希望扩展扩展的单元格,那么您应该为扩展的单元格管理indexPath
的数组。对于该数组的每个索引路径(所选索引路径或选定行或扩展单元格的数组),在cellForRowAtIndexPath
和heightforrow set
expanded frame and 160 height
中。
你可以获得类似的索引路径数组
NSArray *arr = [yourTableView indexPathsForSelectedRows];
答案 2 :(得分:1)
由于isSelectedRowIndex
属性,您的第一个单元格被禁用。一次只能保存一个索引,因此只有一个单元格会显示为展开,其他单元格将根据您的代码折叠。
根据您的要求,需要维护一系列选定的单元格索引。这是可以帮助你的代码。
在ViewController.h文件中(或在类别定义中的ViewController.m文件中)
NSMutableArray *selectedCellIndexes;
在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;
}
希望这有帮助。