Как получить доступ к UIActivityIndicatorView в представлении заголовка раздела UITableView? - PullRequest
2 голосов
/ 14 января 2010

Я хочу сделать что-то довольно простое с моим UITableView: я хочу добавить UIActivityIndicatorView в представление заголовка раздела и сделать его анимированным или исчезнуть, когда захочу.

У меня не было проблем с добавлением UIActivityIndicatorView в представление заголовка с использованием tableView: 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), когда захочу. Проблема в том, что ActivityIndicator исчезает, как только я прокручиваю tableView (я полагаю, это потому, что tableView: viewForHeaderInSection: метод вызывается второй раз).

Как еще я могу добавить ActivityIndicatorView в представление заголовка раздела и по-прежнему иметь возможность отправлять ему сообщения впоследствии? (когда ActivityIndicator не исчезает, когда я прокручиваю вниз, конечно)

Большое спасибо!

Ответы [ 2 ]

0 голосов
/ 14 января 2010

Кажется, проблема вызвана повторным созданием customView и добавлением ActivityIndicator в качестве подпредставления каждый раз, когда вызывается tableView: viewForHeaderInSection:.

Неиспользование подпредставлений помогло мне это исправить:

- (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 занимает всю ширину раздела. Я бы лучше создал уникальный customView для раздела 1 и добавил ActivityIndicator как subView раз и навсегда)

0 голосов
/ 14 января 2010

Если вы пытаетесь использовать один и тот же индикатор активности в нескольких местах, то, вероятно, он перемещается из одного места в другое. Я считаю, что вам нужен другой для каждого заголовка раздела. Возможно, вы захотите использовать MutableArray для отслеживания созданных представлений заголовков, чтобы вы могли использовать их повторно, если найдете в массиве такой объект, который не имеет суперпредставления, что-то вроде удаления из очереди и повторного использования ячеек.

Это всего лишь предположение, поскольку я этого не делал, но я почти уверен, что проблема заключается в том, чтобы повторно использовать один и тот же вид в нескольких местах.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...