加载新页面时动画微调器

Eli*_*one 11 xcode objective-c ios

我有一个来自外部RSS提要的UITableView.

当你选择一行它使用navigationController并从右边滑入时,问题是RSS源包含图像,因此它可能需要几秒钟才能加载,并且没有任何迹象表明你可能会将它误认为是应用程序崩溃.

我决定添加一个微调器,以便您知道正在加载新页面.

这是我的代码:

RootViewController.m

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
NSLog(@"Loading New Page");

[tableView deselectRowAtIndexPath:indexPath animated:YES];
DetailsViewController *detailViewController = [[DetailsViewController alloc] initWithNibName:@"DetailsViewController" bundle:nil];
detailViewController.item = [rssItems objectAtIndex:floor(indexPath.row/2)];
[self.navigationController pushViewController:detailViewController animated:YES];
[detailViewController release];

UIActivityIndicatorView *spinner = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];
spinner.center = CGPointMake(160, 240);
[self.view addSubview:spinner];
[spinner startAnimating];
[spinner release];

}
Run Code Online (Sandbox Code Playgroud)

DetailsViewController.m

- (void)viewDidLoad {
    [super viewDidLoad];

        NSString *imgURL = [item objectForKey:@"image"];
        NSData *mydata = [[NSData alloc] initWithContentsOfURL:[NSURL URLWithString:imgURL]];
        item_photo.image = [[UIImage alloc] initWithData:mydata];

    item_title.text = [item objectForKey:@"title"];
    item_date.text = [NSString stringWithFormat:@"Date: %@",[item objectForKey:@"date"]];
    item_time.text = [NSString stringWithFormat:@"Time: %@",[item objectForKey:@"time"]];
    item_cost.text = [NSString stringWithFormat:@"Cost: £%@",[item objectForKey:@"cost"]];
    item_info.text = [item objectForKey:@"description"];
    self.navigationItem.title = @"Event Type";
}
Run Code Online (Sandbox Code Playgroud)

这段代码有两个问题.

  1. 在加载新页面之后,Spinner才会激活.
  2. 一旦加载,Spinner就不会禁用.

如果有人能帮助我解决这个问题,我将非常感激.

wat*_*n12 25

您正在将活动指示器视图添加到控制器的视图中,该控制器正在推动详细视图控制器,因此您无论如何都不会看到它

尝试将第二组代码移动到DetailsViewController的viewDidLoad方法,您可以在加载完成后在活动指示器上调用stopAnimating.要获得对UIActivityIndi​​cator的引用,您应该添加一个标记

例如在viewDidLoad中

UIActivityIndicatorView *spinner = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];
spinner.center = CGPointMake(160, 240);
spinner.tag = 12;
[self.view addSubview:spinner];
[spinner startAnimating];
[spinner release];
Run Code Online (Sandbox Code Playgroud)

在loadingFinished方法中(完成加载时调用的方法)

[[self.view viewWithTag:12] stopAnimating];
Run Code Online (Sandbox Code Playgroud)