gpt4 book ai didi

iphone - UITableView 自定义节标题,重复问题

转载 作者:行者123 更新时间:2023-12-03 18:43:01 24 4
gpt4 key购买 nike

我在为自定义 UITableView 节标题设置动画时遇到问题。
目标是创建可折叠的部分。
当我第一次点击自定义标题时,它会按预期进行动画处理,但此后每次它都会在原始位置留下重复项并为另一个进行动画处理。

图像示例:

alt text alt text
我的自定义 header :

- (UIView *) tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section { 
UIView* customView = [[[UIView alloc]initWithFrame:CGRectMake(10.0, 0.0, 300.0, 44.0)]autorelease];
customView.backgroundColor = [UIColor lightGrayColor];

UILabel * headerLabel = [[[UILabel alloc] initWithFrame:CGRectZero] autorelease];
headerLabel.backgroundColor = [UIColor clearColor];
headerLabel.opaque = NO;
headerLabel.textColor = [UIColor darkGrayColor];
headerLabel.font = [UIFont boldSystemFontOfSize:16];
headerLabel.frame = CGRectMake(10, 7, 260.0, 44.0);
headerLabel.textAlignment = UITextAlignmentCenter;
NSDictionary *dictionary = [self.data objectAtIndex:section];
headerLabel.text = [dictionary objectForKey:@"Title"];

[customView addSubview:headerLabel];


// add button to right corner of section
UIButton* headerButton = [[UIButton alloc] initWithFrame:CGRectMake(10, 0, 320, 44)];
headerButton.center = CGPointMake( 160.0, 22.0);
headerButton.backgroundColor = [UIColor clearColor];
headerButton.tag = section;
[headerButton addTarget:self action:@selector(expandSection:) forControlEvents:UIControlEventTouchUpInside];

[customView addSubview:headerButton];

return customView;
}

我的动画方法:

- (void) expandSection:(id)sender {

if (expandedSection == [sender tag]) {
expandedSection = -1;
[self.tableView reloadSections:[NSIndexSet indexSetWithIndex:[sender tag]] withRowAnimation:UITableViewRowAnimationNone];
}else if (expandedSection == -1){
expandedSection = [sender tag];
[self.tableView reloadSections:[NSIndexSet indexSetWithIndex:[sender tag]] withRowAnimation:UITableViewRowAnimationNone];
}else{
[self.tableView beginUpdates];
[self.tableView reloadSections:[NSIndexSet indexSetWithIndex:expandedSection] withRowAnimation:UITableViewRowAnimationNone];
expandedSection = [sender tag];
[self.tableView reloadSections:[NSIndexSet indexSetWithIndex:[sender tag]] withRowAnimation:UITableViewRowAnimationNone];
[self.tableView endUpdates];

}
//[self.tableView reloadData];
}

我不太确定发生了什么,但实例表明我需要释放一些东西。我尝试了一些方法,但我无法弄清楚这一点。任何人对此提供帮助都会很棒!

编辑:我认为问题是 reloadSections 导致自定义 View 实例化。我无法释放 View ,因为我需要它作为更新动画的引用。有什么想法可以解决这个问题吗?

最佳答案

找到解决方案。

每次更改之前都需要重新加载该表。这样,表就处于进行任何更改之前的最新状态。

添加[self.tableView重新加载数据];作为“expandSection”方法中的第一个条目。

代码:

- (void) expandSection:(id)sender {

[self.tableView reloadData];

if (expandedSection == [sender tag]) {
expandedSection = -1;
[self.tableView reloadSections:[NSIndexSet indexSetWithIndex:[sender tag]] withRowAnimation:UITableViewRowAnimationNone];
}else if (expandedSection == -1){
expandedSection = [sender tag];
[self.tableView reloadSections:[NSIndexSet indexSetWithIndex:[sender tag]] withRowAnimation:UITableViewRowAnimationNone];
}else{
[self.tableView beginUpdates];
[self.tableView reloadSections:[NSIndexSet indexSetWithIndex:expandedSection] withRowAnimation:UITableViewRowAnimationNone];
expandedSection = [sender tag];
[self.tableView reloadSections:[NSIndexSet indexSetWithIndex:[sender tag]] withRowAnimation:UITableViewRowAnimationNone];
[self.tableView endUpdates];

}
//[self.tableView reloadData];
}

关于iphone - UITableView 自定义节标题,重复问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2350032/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com