【问题标题】:UIButton enable doesn't workUIButton 启用不起作用
【发布时间】:2013-11-16 21:29:11
【问题描述】:

我有一个带有单个按钮和一个活动指示器的 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;

}

我的MainViewController.h 中有UIButtonUIActivityIndicatorView 的属性和readyToGo 方法的声明,如下所示:

@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 没有停止动画......知道我的代码/方法有什么问题?

提前致谢!

【问题讨论】:

  • 你的视图控制器只有weak 引用UIButtonUIActivityIndicatorView 视图有什么特别的原因吗?
  • 不是真的,它是 Xcode 5 中的默认设置,我就这样保留了它...更改为 strong 并不能解决我认为的问题(请参阅下面的 @Wain 的答案),是吗?
  • 弱是好的,他们被他们的superview保留@ShaggyFrog

标签: ios uibutton uiactivityindicatorview


【解决方案1】:

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


这并不理想,但您应该能够通过以下方式获得控制器:

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

(需要添加一些演员表,并且可能会分成多行)

【讨论】:

  • 你说的是对的,从 abc.m,我确实创建了一个 MainViewController 的新实例......我怎样才能从 abc.m 获取现有的实例?如果上述不可行,那么是否可以将按钮/活动指示器加载/提供给 NEW 实例?谢谢!
  • 这取决于视图控制器的关联方式。有些东西必须拥有你想要的东西。它们之间的过渡是什么?
  • abc.m 不是视图。只是一个帮助类,用于计算UITableViewCon 所需的数据,当用户推送startButton 时加载该数据。这就是为什么我禁用按钮,直到 abc.m 告诉我的 MainViewController 完成计算数据并用结果填充数组...
  • 那么主 vc 是应用程序窗口的根视图控制器吗(在故事板中初始)?
  • 前面有一个Navigation Controller,但我没有对其进行任何更改...所以NavigatioN Controller --> MainViewController --> ...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-22
  • 1970-01-01
相关资源
最近更新 更多