0

我正在从我的 NSObject 类在服务器上上传数据,现在我想在上传数据时显示 MBProgressHUD,我知道如何使用 ViewController 显示 MBProgressHUD,但不知道如何使用 NSObject 类显示它。

4

6 回答 6

2
AppDelegate* delegate = [[UIApplication sharedApplication] delegate];
[delegate.window addSubview:HUD];
...
[HUD removeFromSuperview];
于 2012-11-02T15:05:33.323 回答
2

有几种方法可以解决此类问题。最常见的一种是使用委托模式,尽管您可以使用块、KVO 或通知。

你应该首先创建一个协议,这样你就可以在你UIViewController和你NSObject的调用者之间进行通信。尽管您不需要一个人来创建这种通信,但您应该使用它来拥有更灵活的代码。

通常,我会做这样的事情:

@protocol CommunicationDelegate <NSObject>

@required

-(void)communicationSucceed;

-(void)communicationFailedWithError:(NSError*)anError;

在您的内部NSObject,您将有一个weak符合协议的对象的引用CommunicationDelegate。在你的 .h 你应该有这样的东西:

@property(nonatomic, weak) id <CommunicationDelegate> communicationDelegate;

就在你真正开始你的工作之前NSObject,你应该做:

myObjectThatWillDoSomething.communicationDelegate = self;

此时,您的UIViewController和您的NSObject. 在 UIViewController 的 .h 文件中,添加以下内容:

@interface myViewController : UIViewController <CommunicationDelegate>

所以你UIViewController遵守CommunicationDelegate协议。

您现在可以MBProgressHUD从您的UIViewController. 完成NSObject他的工作后,您可以致电:

[communicationDelegate communicationSucceed];

或者

[communicationDelegate communicationFailedWithError:anError]; //anError is used to describe what went wrong

一旦(其中一个)这些方法被调用,您就可以删除您的MBProgressHUD. 了解此方法在您的UIViewController.

于 2012-11-02T15:13:03.500 回答
0

使用 NSNotification Center 停止 Indicator,在视图控制器中用监听方法声明 NSNotification。并从 Webservice 文件发布通知。通知中心监听方法中的停止指示器。

这个链接可以帮助你

于 2012-11-02T15:08:58.123 回答
0

在您的上传器对象上创建一个委托协议

@protocol UploaderThingyDelegate <NSObject>

-(void)stuffStarted;

-(void)stuffEnded;

@end

@interface UploaderThingy : NSObject

@property (weak) id<UploaderThingyDelegate> delegate;

将您的相关 View 或 ViewController 设置为上传者委托并在那里触发 MBProgressHUD 添加/删除。

于 2012-11-02T15:09:02.737 回答
0

当您上传您的 NSObject 时,会显示一个视图,对吗?因此,在该视图中显示您的 HUD。您可能需要创建一个委托来通知视图何时开始下载、何时结束以及是否有错误。

于 2012-11-02T14:53:26.723 回答
-1

这些下面的代码在 NSObject 文件中工作正常

第 1 步:下载https://github.com/jdg/MBProgressHUD

第 2 步:添加委托 MBProgressHUDDelegate

第三步:声明实例 MBProgressHUD *HUD;

第 4 步:在您想要的地方编写代码:

HUD = [[MBProgressHUD alloc] initWithWindow:[UIApplication sharedApplication].keyWindow];
[[UIApplication sharedApplication].keyWindow addSubview:HUD];

HUD.delegate = self;
HUD.labelText = @"Processing";
[HUD show:YES];
于 2014-02-20T04:18:09.430 回答