我有一个带有单个按钮和一个 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
中具有UIActivityIndicatorView
,readyToGo
和MainViewController.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/