2014-01-24 248 views
0

我已經實現了一些代碼來將可展開/可摺疊功能添加到我的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部分,我想當我嘗試爲其餘部分實現相同的代碼時,會發生同樣的問題...

任何幫助都是值得歡迎的。 謝謝。

回答

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

} 

那是。無論如何謝謝你。