在我回到Parent UITableView之前,UIActivityIndi​​catorView没有旋转

时间:2010-03-06 18:10:39

标签: iphone uitableview spinner uiactivityindicatorview

我有一个使用UITableViews的应用程序并从服务器获取数据。我试图在Parent UITableView上放置一个UIActivityIndi​​catorView,因此它在加载Child UITableView时旋转。我通过Interface Builder等连接了UIActivityIndi​​catorView。

-(void)spinTheSpinner {
    NSLog(@"Spin The Spinner");
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
    [spinner startAnimating];
    [NSThread sleepForTimeInterval:9];
    [self performSelectorOnMainThread:@selector(doneSpinning) withObject:nil waitUntilDone:NO];
    [pool release]; 
}

-(void)doneSpinning {
    NSLog(@"done spinning");
    [spinner stopAnimating];
}

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    [NSThread detachNewThreadSelector:@selector(spinTheSpinner) toTarget:self withObject:nil];

    NSMutableString *tempText = [[NSMutableString alloc] initWithString:[categoryNumber objectAtIndex:indexPath.row]];
    Threads *viewController = [[Threads alloc] initWithNibName:@"newTable" bundle:nil tagval:tempText SessionID:PHPSESSID];
    [self.navigationController pushViewController:viewController animated:YES];
    [tableView deselectRowAtIndexPath:indexPath animated:YES];

    [viewController release];                   
}

因此,当我将Child UITableView推送到屏幕上时,UIActivityIndi​​catorView(微调器)就位于Parent UITableView上。如果我转到Child UITableView然后快速返回到Parent View,我可以在旋转的过程中捕获UIActivitIndicatorView。 NSLog正在正确的时间显示 - 当我第一次点击Parent UITableView中的单元格时,“旋转微调器”出现在日志中。 9秒后,我在Log中“完成了旋转”,但是旋转器永远不会旋转,除非我及时弹回到Parent UITableView。

为什么这不能正常工作的想法?

2 个答案:

答案 0 :(得分:4)

也许sleepForTimeInterval阻止了动画。

尝试删除sleepForTimeInterval,并通过调用performSelector:withObject:afterDelay:替换performSelectorOnMainThread。

答案 1 :(得分:0)

让ui在线程外显示:

[NSObject dispatchUI:^{
     [spinner startAnimating];
}];