我有一个带有单个按钮和一个 Activity 指示器的UIViewController。
在此VC MainViewController.m的类中,我在viewDidAppear中执行以下操作:

- (void)viewDidLoad
{
    [super viewDidLoad];
    _actLoadLoc.color = [UIColor blueColor];
    _startButton.enabled = NO;
    [_startButton setTitle:@"Fetching Location" forState:UIControlStateDisabled];
}

我的MainViewController.m中的另一种方法称为readyToGo,其实现方式如下:
-(void) readyToGo
{

    [NSThread sleepForTimeInterval:1.0f];
    NSLog(@"Done sleeping");
    _startButton.enabled = YES;
    [_startButton setTitle:@"Start" forState:UIControlStateNormal];
    _actLoadLoc.stopAnimating;

}

我在UIButton中具有UIActivityIndicatorViewreadyToGoMainViewController.h方法的声明的属性,如下所示:
@property (weak, nonatomic) IBOutlet UIButton *startButton;
@property (weak, nonatomic) IBOutlet UIActivityIndicatorView *actLoadLoc;
-(void) readyToGo;

另一个导入readyToGo的类abc.[h/m]调用MainViewController.h方法。该调用在abc.m中的功能之一完成用计算的数据填充数组之后发生。

由于Done Sleeping在输出中显示,因此该调用有效,但是startButton未启用,其测试未更改,并且actLoadLoc没有停止动画……知道我的代码/方法有什么问题吗?

提前致谢!

最佳答案

您正在错误的视图控制器实例上调用readyToGo。您有一个实例,它在屏幕上显示内容,并且您正在以某种方式创建一个新实例来调用该方法。您需要获取现有的。

这不是理想的,但是您应该能够使用以下方法获得控制器:

UINavigationController *n = (UINavigationController *)[UIApplication sharedApplication].keyWindow.rootViewController;
SDPPMainViewController *mvc = (SDPPMainViewController *)[n viewControllers][0];

(将需要添加一些强制转换,并且可能应该分解为多行)

关于ios - UIButton启用不起作用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20024141/

10-12 04:21