1

如果我的术语不正确,我深表歉意——我学习 Objective C 才几天,所以我还是有点陌生​​。

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

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

4

2 回答 2

1

使用委托模式。

为您的 ProgressBar 更新创建一个协议:

@protocol MyProgressBarDelegate

- (void) onUpdateProgress:(NSInteger)progress;

@end

您的 ViewController 实现了委托并包含此 onUpdateProgress 方法。

您的自定义类有一个您在其初始化程序中设置的委托变量,它设置为 ViewController 实例。

id <MyProgressBarDelegate> delegate;

更新您的 CustomClass 指定初始化程序以将 delegate:(id)delegate 作为参数传递。

- (void) initWithDelegate:(id<MyProgressBarDelegate>)delegate
{
    self.delegate = delegate;
}

初始化您的 CustomClass 时,[[CustomClass alloc] initWithDelegate:self];

或将委托设置为可设置的@property,并通过 [mCustomClass setDelegate:self] 进行更新;

然后您可以从您的自定义类中调用 onUpdateProgress 方法。

if (delegate != nil)     
 [delegate onUpdateProgress:int];
于 2012-08-14T13:42:33.253 回答
0

您可以将视图控制器分配为自定义类的委托,并使自定义类向视图控制器报告其进度。首先,为自定义类的委托定义一个协议,然后使您的视图控制器符合该协议,并在您创建自定义类的实例后分配委托。

于 2012-08-14T13:40:56.260 回答