从另一个类实例更新在一个类中定义的UIProgressView

时间:2012-08-14 13:37:19

标签: ios iphone objective-c uiprogressview

如果我的术语不正确,我道歉 - 我已经学习了几天的Objective C,所以我还是有点不熟悉。

我有一个ViewController,其中有一个进度条(UIProgressView)与IBOutlet使用Xcode的故事板“快速拖动”功能连接起来。 ViewController实例化我编写的自定义类的对象。它将消息传递给该对象的选择器,该选择器执行大量工作,大约需要15-20秒。我希望能够在作业进展时更新进度条,但我无法弄清楚如何访问调用类的UIProgressView来执行此操作。我不需要使用计时器,因为对象的方法运行一个长循环,我知道它的限制,并可以根据循环中的当前位置更新进度条。

我确信这是客观C编程中一个非常基本的概念,但是朝着正确的方向或文档的方法会帮助我。

2 个答案:

答案 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。首先,为自定义类的委托定义协议,然后使视图控制器符合该协议,并在创建自定义类的实例后分配委托。