我有一个与我的视图控制器通信的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.
显示在控制台中。
答案 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;
}