我在TableViewController上有一个UIActivityIndicatorView。当我在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];
}
答案 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)
我已经注意到UIActivityIndicators在UI线程挂起时会绘制,但是您可能需要在后台线程中执行任务,以便UI线程为进度指示器设置动画。见Apple's documentation about Concurrency Programming。通常,最好在后台线程上执行冗长的操作,以便UI线程可以保持对用户的响应。
答案 3 :(得分:0)
init方法中是否已提供self.view
?不应该在viewDidLoad
方法中执行此类操作吗?