ios - 改变 viewDidLoad 之外的 UIView 元素

标签 ios objective-c xcode

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

但是,每当我尝试更新 UIView我认为除了 viewDidLoad 之外的任何方法中的元素,它完全被忽略了。

有什么我想念的吗?

super 简单的例子:

这有效

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

这没有(这个方法在我的 View Controller 中)
- (void)updateProgressBar:(float)myProgress
{
  NSLog(@"updateProgressBar called.");
  progressBar.progress = myProgress;
}

所以,如果我打电话:
float currentProgress = 1.0;

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

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

最佳答案

您可以做的是为进度条更新添加一个 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;
}

关于ios - 改变 viewDidLoad 之外的 UIView 元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19532909/

相关文章:

ios - NSArrayController是否已弃用,它的替代品是什么?

ios - 通过 reloadData 更新 UITableView 时保持选择

ios - 如何在 Swift 3 中为手势识别器设置 'enabled' 属性

c - Atoi(char *p) 函数

xcode - IOS/Xcode/Storyboard : How can I segue from table row to modal view controller

ios - NSDictionary dictionaryWithObject:key:使应用程序崩溃

ios - SWIFT 中类似于 UIColor.systemgray 的任何标准字符串

ios - 手动为字典分配值和使用updateValue函数有什么区别?

iOS - 从一个 View Controller 传递数据以在另一个 View Controller 的 init 方法中使用

ios - 呈现另一个 View Controller 时,如何阻止 "from" View 变黑?