0

我有一个与我的视图控制器通信的 EventsManager 类。我希望能够UIView通过从 EventManager 类调用视图内的方法(例如 updateProgressBar)来更新元素(图像、进度条等)。

但是,每当我尝试UIView从除 之外的任何方法中更新元素时viewDidLoad​​,它都会被完全忽略。

有什么我想念的吗?

超级简单的例子:

这有效

- (void)viewDidLoad
{
  progressBar.progress = 0.5;
}

这没有(这个方法在我的视图控制器中)

- (void)updateProgressBar:(float)myProgress
{
  NSLog(@"updateProgressBar called.");
  progressBar.progress = myProgress;
}

所以,如果我打电话:

float currentProgress = 1.0;

ViewController *viewController = [[ViewController alloc] init];
[viewController updateProgressBar:currentProgress]

从我的 EventsManager 类updateProgressBar 调用(通过断点证明),但进度条更新被忽略。没有错误或异常抛出。并updateProgressBar called.显示在控制台中。

4

1 回答 1

1

您可以做的是为进度条更新添加一个 NSNotification 并从您想要的任何地方调用它。

ViewController 的 viewDidLoad 中添加这个观察者

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(progressBarUpdater:) name:@"progressBarUpdater" object:nil];

然后添加以下方法

-(void)progressBarUpdater:(float)currentProgress
{
    [[NSNotificationCenter defaultCenter] postNotificationName:@"progressBarUpdater" object:nil userInfo:[NSDictionary dictionaryWithObjectsAndKeys:currentProgress,@"progress", nil]];
}

并更新您的方法

- (void)updateProgressBar:(NSNotification *)notificaiton
{
    NSLog(@"updateProgressBar called.");
    NSDictionary *dict = [notificaiton userInfo];
    progressBar.progress = [dict valueForKey:@"progress"];

    //  progressBar.progress = myProgress;
}
于 2013-10-23T05:16:15.483 回答