tableView可展开/可折叠部分,某些部分不展开/折叠
问题描述:
我已经实现了一些代码来将可展开/可折叠功能添加到我的tableView部分。可以有0到6个部分,取决于核心数据对象。 我已更新viewForHeaderInSection
方法以包含if子句,具体取决于节名称。在同一个方法中,我使用带按钮的UIView来展开或折叠节的行。我还更新了heightForRowAtIndexPath方法以根据选定要展开/折叠的部分更改行高。tableView可展开/可折叠部分,某些部分不展开/折叠
要测试的应用程序,我只检查部分0和部分1
我把这里的代码对所有牵连方法:
//viewForHeaderInSection method
- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
{
static NSString *header = @"customHeader";
// UITableViewHeaderFooterView *vHeader;
id <NSFetchedResultsSectionInfo> theSection = [[self.fetchedResultsController sections] objectAtIndex:section];
NSString *tmp = [theSection name];
NSLog(@"SECTIONNAME = %@",tmp);
UIView *mView = [[UIView alloc]initWithFrame:CGRectMake(10.0f, 0.0f, 300.0f, 20.0f)];
[mView setBackgroundColor:[UIColor redColor]];
if ([tmp isEqualToString:@"0"]){
NSLog(@"HAS ENTRADO EN SECTION 0");
UIImageView *logoView = [[UIImageView alloc]initWithFrame:CGRectMake(285.0f, 2.0f,20.0f,20.0f)];
[logoView setImage:[UIImage imageNamed:@"leftarrow.png"]];
[mView addSubview:logoView];
UIButton *bt = [UIButton buttonWithType:UIButtonTypeCustom];
[bt setFrame:CGRectMake(20.0f, -4.0f, 150.0f, 30.0f)];
[bt setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
[bt setTag:0];
[bt.titleLabel setFont:[UIFont systemFontOfSize:15]];
[bt.titleLabel setTextAlignment:NSTextAlignmentNatural];
[bt.titleLabel setTextColor:[UIColor yellowColor]];
NSString *valor = [NSString stringWithFormat:@"OVERDUE (%d)", [self.tableView
numberOfRowsInSection:section]];
[bt setTitle:valor forState: UIControlStateNormal];
[bt addTarget:self action:@selector(addCell:) forControlEvents:UIControlEventTouchUpInside];
[mView addSubview:bt];
return mView;
}
if ([tmp isEqualToString:@"1"]){
NSLog(@"HAS ENTRADO EN SECTION 1");
UIView *mView = [[UIView alloc]initWithFrame:CGRectMake(10.0f, 0.0f, 300.0f, 20.0f)];
[mView setBackgroundColor:[UIColor orangeColor]];
UIImageView *logoView = [[UIImageView alloc]initWithFrame:CGRectMake(285.0f, 2.0f,20.0f,20.0f)];
[logoView setImage:[UIImage imageNamed:@"leftarrow.png"]];
[mView addSubview:logoView];
UIButton *bt = [UIButton buttonWithType:UIButtonTypeCustom];
[bt setFrame:CGRectMake(20.0f, -4.0f, 150.0f, 30.0f)];
[bt setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
NSLog(@"SECTION 1 EN SEGUNDA LECTURA");
[bt setTag:1];
[bt.titleLabel setFont:[UIFont systemFontOfSize:15]];
[bt.titleLabel setTextAlignment:NSTextAlignmentNatural];
[bt.titleLabel setTextColor:[UIColor yellowColor]];
NSString *valor = [NSString stringWithFormat:@"TODAY (%d)", [self.tableView
numberOfRowsInSection:section]];
[bt setTitle:valor forState: UIControlStateNormal];
[bt addTarget:self action:@selector(addCell1:) forControlEvents:UIControlEventTouchUpInside];
[mView addSubview:bt];
return mView;
}
return mView;
}
// heightForRowAtIndexPath method
-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
if (indexPath.section == 0){
return heightOfSection0;NSLog(@"HAS PULSADO SECTION 0 CERRADA");
}
else {
return 50.0f;NSLog(@"HAS PULSADO SECTION 0 ABIERTA");
}
if (indexPath.section == 1){
return heightOfSection1;NSLog(@"HAS PULSADO SECTION 1 CERRADA");
}
else {
return 50.0f;NSLog(@"HAS PULSADO SECTION 0 ABIERTA");
}
}
而且现在的按钮操作方法:
- (void)addCell:(UIButton *)bt{
// If section of more information
if(bt.tag == 0) {
NSLog(@"HAS PULSADO SECTION 0 EN ADDCELL");
// Initially more info is close, if more info is open
if(isSection0Open) {
// Set height of section
heightOfSection0 = 45.0f;
// Reset the parameter that more info is closed now
isSection0Open = NO;
}else if (isSection0Open==NO){
// Set height of section
heightOfSection0 = 0.0f;
// Reset the parameter that more info is closed now
isSection0Open = YES;
}
}
[self.tableView reloadData];
[self.tableView reloadSections:[NSIndexSet indexSetWithIndex:0] withRowAnimation:UITableViewRowAnimationFade];
}// end addCell
- (void)addCell1:(UIButton *)bt{
// If section of more information
if(bt.tag == 1) {
NSLog(@"HAS PULSADO SECTION 1 EN ADDCELL1");
// Initially more info is close, if more info is open
if(isSection1Open) {
// Set height of section
heightOfSection1 = 45.0f;
// Reset the parameter that more info is closed now
isSection1Open = NO;
}else if (isSection1Open==NO){
// Set height of section
heightOfSection1 = 0.0f;
// Reset the parameter that more info is closed now
isSection1Open = YES;
}
}
[self.tableView reloadData];
[self.tableView reloadSections:[NSIndexSet indexSetWithIndex:1] withRowAnimation:UITableViewRowAnimationFade];
}// end addCell1
第0节没有问题,它按预期展开和折叠。问题在于第1部分,我想当我尝试为其余部分实现相同的代码时,会发生同样的问题...
任何帮助都是值得欢迎的。 谢谢。
答
我检测到我的错误,它是在heightForRowAtIndexPath方法。这是写在我的应用程序的正确方法:
-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
if (indexPath.section == 0){
return heightOfSection0;
}
else if (indexPath.section == 1){
return heightOfSection1;
}
else {
return 45.0f;
}
}
那是。无论如何谢谢你。