我已经实现了一些代码来为我的tableView部分添加可扩展/可折叠功能。可以有0到6个部分,取决于核心数据对象。
我已更新viewForHeaderInSection
方法,以根据部分名称包含if子句。在同一方法中,我使用带有按钮的UIView来展开或折叠节行。我还更新了heightForRowAtIndexPath方法,以根据选择要展开/折叠的部分更改行高。
要测试应用程序,我只检查第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部分,我想当我尝试为其余部分实现相同的代码时会发生同样的问题......
欢迎任何帮助。 谢谢。
答案 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;
}
}
那是的。无论如何,谢谢你。