改变viewDidLoad之外的UIView元素

时间:2013-10-23 04:39:02

标签: ios objective-c xcode

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

但是,每当我尝试在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.显示在控制台中。

1 个答案:

答案 0 :(得分:1)

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

ViewDtroller的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;
}