UIActivityIndi​​catorView没有响应

时间:2012-02-21 20:12:37

标签: iphone uibutton uiactivityindicatorview

触发UIButton时,会启动UIActivityIndicator,然后在implementLogin完成后停止:

-(IBAction)loginButton {
    NSLog(@"loginButton triggered");

    // Checks the Fields are not empty 
    if ([sessionIdField.text length] != 0 && [usernameField.text length] != 0 ) {
        NSLog(@"Beginning Spinner");
        // Displays spinner
        [activitySpinner startAnimating];

        [self implementLogin]; 

        // Displays spinner
        [activitySpinner stopAnimating];
    }
}

但是在运行时,微调器不会出现!我已经将微调器设置为“在停止时隐藏”。

当我在视图加载之前将活动指示器设置为动画时,它显示为它应该是,所以我猜它有问题UIButton ...(另外,我正在使用'触摸在里面'为按钮。)

这是一个简单的问题......任何人都可以帮忙吗?

由于

2 个答案:

答案 0 :(得分:2)

无论implementLogin正在做什么(也许是在做网络请求?),它都是在主线程上进行的,这可能会阻止像锭床动画这样的UI更新。

你可以重新编码:

[activitySpinner startAnimating];
dispatch_async(dispatch_get_global_queue(DISPATCH_PRIORITY_DEFAULT, 0), ^{
    [self implementLogin]; 
    dispatch_async(dispatch_get_main_queue(), ^{
        // Stops spinner
        [activitySpinner stopAnimating];
    }
}

[代码未经测试,但您明白了。]

这里发生的是你将登录任务发送到后台,而该块最后要做的就是停止主线程上的微调器(作为一个单独的任务)。

答案 1 :(得分:0)

如果没有更多代码,人们只能猜出它不起作用的原因。

我假设'Beginning Spinner'输出正确(?)

如果是这样,您可能没有正确初始化UIActivityIndicatorView。 它看起来像这样吗?

activitySpinner = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];
activitySpinner.hidesWhenStopped = YES;
[view addSubview:activitySpinner];