2013-03-19 213 views
0

我使用下面的代碼爲uitableview展開和collapse.Its工作正常。但是,當我選擇任何部分其展開但不折疊先前展開的部分。展開和摺疊UITableview

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
if ([self tableView:tableView canCollapseSection:indexPath.section]) 
    { 
    if (!indexPath.row) 
    { 
     // only first row toggles exapand/collapse 
     [tableView deselectRowAtIndexPath:indexPath animated:YES]; 
     NSInteger section = indexPath.section; 
     BOOL currentlyExpanded = [expandedSections containsIndex:section]; 
     NSInteger rows; 
     NSMutableArray *tmpArray = [NSMutableArray array]; 
    if (currentlyExpanded) 
     { 
      rows = [self tableView:tableView numberOfRowsInSection:section]; 
      NSLog(@"expanded"); 
      [expandedSections removeIndex:section]; 
      screenTypeReloadCheck = NO; 
     } 
     else 
     { 
      screenTypeReloadCheck =YES; 
      [expandedSections addIndex:section]; 
      rows = [self tableView:tableView numberOfRowsInSection:section]; 

     } 
     for (int i=1; i<rows; i++) 
     { 
      NSIndexPath *tmpIndexPath = [NSIndexPath indexPathForRow:i 
                  inSection:section]; 
      [tmpArray addObject:tmpIndexPath]; 
     } 

     UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath]; 

     if (currentlyExpanded) 
     { 
      [tableView deleteRowsAtIndexPaths:tmpArray 
          withRowAnimation:UITableViewRowAnimationTop]; 

      UIImageView *imView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"UITableExpand"]]; 
      cell.accessoryView = imView; 
     } 
     else 
     { 
      [tableView insertRowsAtIndexPaths:tmpArray 
          withRowAnimation:UITableViewRowAnimationTop]; 

      UIImageView *imView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"UITableContract"]]; 
      cell.accessoryView = imView; 
     } 
    } 
} 

}

感謝

+0

: - 請參閱以下鏈接的答案: - http://stackoverflow.com/a/8697503/952440。這將有所幫助 – 2013-03-19 06:27:50

+0

可能重複的[展開/摺疊部分在UITableView](http://stackoverflow.com/questions/1938921/expand-collapse-section-in-uitableview) – 2013-03-19 06:31:29

回答

0

的TableView部分沒有崩潰,但是擴大。因爲,您的當前展開總是返回NO。所以你總是在擴大。

if (currentlyExpanded) 
     { 
    rows = [self tableView:tableView numberOfRowsInSection:section]; 
      NSLog(@"expanded"); 
      [expandedSections removeIndex:section]; 
      screenTypeReloadCheck = NO; 
     } 
     else 
     { 
      screenTypeReloadCheck =YES; 
      [expandedSections addIndex:section]; 
      rows = [self tableView:tableView numberOfRowsInSection:section]; 
     } 

我不知道您如何設置當前Expanded值。如果您需要更多幫助,請分享幾行代碼。

+0

Hi @ peter,if(!expandedSections) { expandedSections = [[NSMutableIndexSet alloc] init]; } – user1844142 2013-03-19 06:33:46

1

我做同樣的事情在我的應用程序。這裏是解決方案..

在您的.h

#import "sampleCustomCell.h" 

@interface second : UIViewController <UITableViewDelegate,UITableViewDataSource> 
{ 
    NSMutableDictionary *selectedIndexes; 
    sampleCustomCell *samplCustom; 
    UITableView *tblTempData; 
    NSMutableArray *yourAry; 
} 

@property(nonatomic,retain) sampleCustomCell *samplCustom; 
@property (nonatomic,retain) NSMutableArray *yourAry; 
@property (nonatomic,retain) IBOutlet UITableView *tblTempData; 

@end 

在您的m

@synthesize samplCustom; 
@synthesize tblTempData; 

BOOL isSelected; 

int kCellHieght=0; 

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    yourAry = [[NSMutableArray alloc] initWithObjects:@"1_id",@"2_id",@"3_id",@"4_id",@"5_id",@"6_id",@"7_id",@"8_id",@"9_id",@"10_id", nil]; 
    selectedIndexes = [[NSMutableDictionary alloc] init]; 
} 


#pragma mark TableView with Expand and collapse 


- (BOOL)cellIsSelected:(NSIndexPath *)indexPath { 
    // Return whether the cell at the specified index path is selected or not 
    NSLog(@"%@", selectedIndexes); 
    NSNumber *selectedIndex = [selectedIndexes objectForKey:indexPath]; 
    NSLog(@"%@", selectedIndex); 
    return selectedIndex == nil ? FALSE : [selectedIndex boolValue]; 
} 


-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    if([self cellIsSelected:indexPath]) 
    { 
     kCellHieght = 200; //Expanded height for your customCell xib. 
    } 
    else 
    { 
     kCellHieght = 130; // Height of your customCell xib 
    } 
    return kCellHieght; 
} 

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView 
{ 
    return 1; 
} 

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
{ 
    return [yourAry count]; 
} 


- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    sampleCustomCell *cell; 
    if (tableView.tag == 11) 
    { 
     cell = (sampleCustomCell *)[tableView dequeueReusableCellWithIdentifier:@"sampleCustomCell"]; 
     NSArray *nib; 
     for (UIControl *subview in cell.contentView.subviews) { 
      [subview removeFromSuperview]; 
     } 
     if(cell == nil) 
     { 
      nib = [[NSBundle mainBundle] loadNibNamed:@"sampleCustomCell" owner:self options:nil]; 

      for(id oneobject in nib) 
      { 
       if([oneobject isKindOfClass:[sampleCustomCell class]]) 
       { 
        cell = (sampleCustomCell *)oneobject; 
        //[cell setIndexpath:indexPath]; 
        //[cell setDelegete:self]; 
        cell.lblProduct.text = [yourAry objectAtIndex:[indexPath row]]; 
       } 
      } 
     } 

     if([self cellIsSelected:indexPath]) 
     { 
      [UIView beginAnimations:nil context:nil]; 
      [UIView setAnimationDuration:3]; 
      [UIView commitAnimations]; 
     [self performSelector:@selector(showHidden:) withObject:cell afterDelay:0.4]; 
     } 
    } 
    return cell; 
} 


- (void)tableView:(UITableView *)aTableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyleforRowAtIndexPath:(NSIndexPath *)indexPath 
{ 

} 

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    isSelected = ![self cellIsSelected:indexPath]; 
    [tableView deselectRowAtIndexPath:indexPath animated:TRUE]; 
    BOOL isSelected = ![self cellIsSelected:indexPath]; 
    NSNumber *selectedIndex = [NSNumber numberWithBool:isSelected]; 
    [selectedIndexes removeAllObjects]; 
    [self hideTV:tableView]; 
    [selectedIndexes setObject:selectedIndex forKey:indexPath]; 
    NSLog(@" array %@", selectedIndexes); 
    [self.tblTempData beginUpdates]; 


    sampleCustomCell *selectedCell = (sampleCustomCell *)[tblTempData cellForRowAtIndexPath:indexPath]; 
    if([self cellIsSelected:indexPath]) 
    { 
     samplCustom = selectedCell; 
     [UIView animateWithDuration:15 delay:0.2 options:UIViewAnimationCurveLinear animations:^{NSLog(@"animating");} completion:^(BOOL finished){ 
      NSLog(@"Done 1!"); 
     }]; 
     [UIView commitAnimations]; 
    } 
    else 
    { 
     [UIView animateWithDuration:5 delay:0.2 options:UIViewAnimationCurveLinear animations:^{NSLog(@"animating");} completion:^(BOOL finished){ 
      NSLog(@"Done 1!"); 
     }]; 
     [UIView commitAnimations]; 
    } 
    [self.tblTempData endUpdates]; 
    [tblTempData reloadData]; 
} 

-(void)hideTV:(UIView *) view{ 

    [tblTempData reloadData]; 

    for (id View in [view subviews]) { 
     if ([View isKindOfClass:[UITextView class]]) { 
      [View setHidden:YES]; 
     } 

     if ([View isKindOfClass:[UITableViewCell class]]) { 
      UITableViewCell *cell = (UITableViewCell *) View; 
      [self hideTV:cell.contentView]; 
     } 
    } 
} 


-(void) showHidden : (UITableViewCell *)cell{ 
    for (id View in [cell subviews]) { 
     if ([View isKindOfClass:[UITextView class]]) { 
      if ([View tag] == 111) { 
       [View setHidden:NO]; 
      } 
     } 
    } 
} 

Hopr這有助於..快樂編碼..謝謝..