加载数据时无法显示UIActivityIndi​​catorView

时间:2011-07-21 14:26:23

标签: iphone ios uiactivityindicatorview

我在TableViewController上有一个UIActivityIndi​​catorView。当我在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 个答案:

答案 0 :(得分:2)

[self.view addSubview:activityIndicator];

从这段代码中我认为tableView可能不像self.view那样设置。您正在view中添加它,因此您的方法[activityIndicator startAnimating];可能实际上正在运行,但您必须将其设置为“将子视图置于前面”。它可能会在tableview下面进行动画制作。

答案 1 :(得分:1)

我会这样做:

- (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/

答案 2 :(得分:0)

我已经注意到UIActivityIndi​​cators在UI线程挂起时会绘制,但是您可能需要在后台线程中执行任务,以便UI线程为进度指示器设置动画。见Apple's documentation about Concurrency Programming。通常,最好在后台线程上执行冗长的操作,以便UI线程可以保持对用户的响应。

答案 3 :(得分:0)

init方法中是否已提供self.view?不应该在viewDidLoad方法中执行此类操作吗?