使用以下代码进行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 :(得分:1)
我在我的应用程序中做了同样的事情..这是解决方案..
你的.h 中的
你的.m #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
霍普尔这有助于...快乐的编码..谢谢.. @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];
}
}
}
}
答案 1 :(得分:0)
TableView部分不会折叠但会展开。因为,您的currentExpanded始终返回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];
}
我不知道你如何设置currentExpanded值。如果您需要更多帮助,请分享更多代码。