如果我的术语不正确,我道歉 - 我已经学习了几天的Objective C,所以我还是有点不熟悉。
我有一个ViewController
,其中有一个进度条(UIProgressView
)与IBOutlet
使用Xcode的故事板“快速拖动”功能连接起来。 ViewController实例化我编写的自定义类的对象。它将消息传递给该对象的选择器,该选择器执行大量工作,大约需要15-20秒。我希望能够在作业进展时更新进度条,但我无法弄清楚如何访问调用类的UIProgressView
来执行此操作。我不需要使用计时器,因为对象的方法运行一个长循环,我知道它的限制,并可以根据循环中的当前位置更新进度条。
我确信这是客观C编程中一个非常基本的概念,但是朝着正确的方向或文档的方法会帮助我。
答案 0 :(得分:1)
使用委托模式。
为ProgressBar更新创建协议:
@protocol MyProgressBarDelegate
- (void) onUpdateProgress:(NSInteger)progress;
@end
您的ViewController实现委托并包含此onUpdateProgress方法。
您的自定义类有一个委托变量,您在其初始化程序中设置它,它设置为ViewController实例。
id <MyProgressBarDelegate> delegate;
更新CustomClass指定的初始化程序,以将委托:(id)委托作为参数传递。
- (void) initWithDelegate:(id<MyProgressBarDelegate>)delegate
{
self.delegate = delegate;
}
初始化CustomClass时,[[CustomClass alloc] initWithDelegate:self];
OR委托一个可设置的@property,并通过[mCustomClass setDelegate:self]更新;
然后,您可以从自定义类中调用onUpdateProgress方法。
if (delegate != nil)
[delegate onUpdateProgress:int];
答案 1 :(得分:0)
您可以将视图控制器指定为自定义类的委托,并使自定义类将其进度报告给viewcontroller。首先,为自定义类的委托定义协议,然后使视图控制器符合该协议,并在创建自定义类的实例后分配委托。