我想用UITableView做一些非常简单的事情:我想在一个部分的标题视图中添加一个UIActivityIndicatorView,并在需要时使其生动或消失。
使用tableView将jIActivityIndicatorView添加到标题视图时没有问题:viewForHeaderInSection:
- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
{
UIView* customView = [[UIView alloc] initWithFrame:CGRectMake(0.0, 0.0, 320.0, 60.0)];
// create the title
UILabel * headerLabel = [[UILabel alloc] initWithFrame:CGRectMake(15.0, 12.0, 310.0, 22.0)];
headerLabel.text = @"some random title here";
[customView addSubview:headerLabel];
[headerLabel release];
// Add a UIActivityIndicatorView in section 1
if(section == 1)
{
[activityIndicator startAnimating];
[customView addSubview:activityIndicator];
}
return [customView autorelease];
}
activityIndicator是我的控制器类的属性。 我在viewDidLoad方法中分配它:
- (void)viewDidLoad
{
(...)
activityIndicator = [[UIActivityIndicatorView alloc] initWithFrame:CGRectMake(200, 10, 25, 25)];
}
这样我就可以随时向它发送消息(比如-startAnimating或-stopAnimating)。 问题是,当我滚动tableView时,activityIndicator就会消失(我想这是因为第二次调用tableView:viewForHeaderInSection:方法)。
我还能如何在该部分的标题视图中添加activityIndicatorView,并且之后仍可以向其发送消息? (当我向下滚动时,activityIndicator没有消失)
非常感谢!
答案 0 :(得分:0)
如果您尝试在多个位置使用相同的活动指示器,那么它可能会从一个地方移动到另一个地方。我相信你需要一个不同的部分标题。您可能希望使用MutableArray来跟踪您创建的标题视图,这样如果您在数组中找到一个没有超级视图的标题视图,就可以重用它们,有点像是出列并重用单元格。
这只是猜测,因为我没有这样做,但我很确定问题是尝试在多个地方重复使用相同的视图。
答案 1 :(得分:0)
这个问题似乎是由每次调用tableView:viewForHeaderInSection:重新创建一个customView并将activityIndicator添加为子视图引起的。
不使用子视图帮我解决了问题:
- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
{
// Add a UIActivityIndicatorView in section 1
if(section == 1)
{
[activityIndicator startAnimating];
return activityIndicator;
}
UIView* customView = [[UIView alloc] initWithFrame:CGRectMake(0.0, 0.0, 320.0, 60.0)];
// create the title
UILabel * headerLabel = [[UILabel alloc] initWithFrame:CGRectMake(15.0, 12.0, 310.0, 22.0)];
headerLabel.text = @"some random title here";
[customView addSubview:headerLabel];
[headerLabel release];
return [customView autorelease];
}
(看起来很丑陋,activityIndicator占用了该部分的整个宽度。我最好为第1部分创建一个独特的customView,并将activityIndicator一次性添加为一个subView。)