Не удается получить UIActivityIndicatorView для отображения при загрузке данных - PullRequest
0 голосов
/ 21 июля 2011

У меня есть UIActivityIndicatorView на TableViewController. Когда я начинаю анимировать в init, я вижу индикатор активности, но когда я перемещаю команду запуска в другое место, она не будет работать / показывать. Кто-нибудь имеет представление о том, что я делаю неправильно, я не могу найти это здесь. Я хочу, чтобы он отображался во время загрузки данных.

TableViewController.h

#import <UIKit/UIKit.h>


@interface CategoryTableViewController : UITableViewController {
    NSArray *cats;
    UIActivityIndicatorView *activityIndicator;
}

@end

TableViewController.m

#import "CategoryTableViewController.h"
#import "NieuwsDataManager.h"
#import "CategoryTableCell.h"
#import "NiewsCategory.h"
#import "NieuwsTableViewController.h"


@implementation CategoryTableViewController

- (id)initWithStyle:(UITableViewStyle)style
{
    self = [super initWithStyle:style];
    if (self) {
        cats = [[NSArray alloc ] initWithArray:[NieuwsDataManager sharedInstance].newsCategories];
        self.title = @"Nieuws" ;
        activityIndicator = [[UIActivityIndicatorView alloc] initWithFrame: CGRectMake(100,150,120,120)];
        activityIndicator.activityIndicatorViewStyle = UIActivityIndicatorViewStyleGray;


        [self.view addSubview:activityIndicator];


    }
    return self;
}

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{

    [activityIndicator startAnimating];



    NiewsCategory *cat = [[NieuwsDataManager sharedInstance].newsData objectForKey:[cats objectAtIndex:indexPath.row]];



    [[NieuwsDataManager sharedInstance] getNewsByCategory:cat];



    NieuwsTableViewController *nt = [[NieuwsTableViewController alloc] initWithCategory:cat];

    [activityIndicator stopAnimating];

    [self.navigationController pushViewController:nt animated:YES];

    [nt release];

    [self.tableView deselectRowAtIndexPath:indexPath animated:NO];
}

Ответы [ 4 ]

2 голосов
/ 21 июля 2011
[self.view addSubview:activityIndicator];

Из этого кода я думаю, что tableView не так, как self.view. Вы добавляете его в view, поэтому вполне возможно, что ваш метод [activityIndicator startAnimating]; действительно работает, но вы должны установить его «вывести подпредставление вперед». Возможно, это анимировано под табличным представлением.

1 голос
/ 21 июля 2011

Я бы сделал это:

- (id)initWithStyle:(UITableViewStyle)style {
  //your code
  [self.view addSubview:activityIndicator];
  [activityIndicator startAnimating];
}

- (void)viewDidAppear:(BOOL)animated {
  [super viewDidLoad];
  [activityIndicator stopAnimating];
}

И я нашел урок по этому поводу, он показывает действительно хороший способ сделать это: http://www.markbetz.net/2010/09/30/ios-diary-showing-an-activity-spinner-over-a-uitableview/

0 голосов
/ 19 октября 2011

self.view уже доступно в методе init? Разве такая операция не должна выполняться методом viewDidLoad?

0 голосов
/ 21 июля 2011

В прошлом я заметил, что UIActivityIndicators рисуют, когда поток пользовательского интерфейса зависает, но, возможно, вам потребуется выполнить задачу в фоновом потоке, чтобы поток пользовательского интерфейса мог анимировать индикатор прогресса. См. документацию Apple о параллельном программировании . В общем случае хорошо выполнять длительные операции в фоновом потоке, чтобы поток пользовательского интерфейса мог оставаться отзывчивым для пользователя.

...