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;
}