1

我想知道是否有一种方法可以像使用 UINavigationController 启动应用程序时那样声明项目范围的变量,并且您可以从应用程序的任何位置调用该导航控制器,因为它是在应用程序委托中声明的。

我想创建一个项目(全局)变量,允许我调用 SVProgress hud 或从我的应用程序中的任何位置关闭它。我有这个问题,我将 UIViewController 加载到导航堆栈上,启动 SVProgress hud 然后向我的数据库发出请求。如果我收到错误返回,我需要处理一些事情,其中​​之一是能够解除SVProgress 界面。

这是我到目前为止的代码

AppDelegate.h

#import "SVProgressHUD.h"

@interface MYAPPAppDelegate : UIResponder <UIApplicationDelegate> {
//..
}

@property (strong, nonatomic) SVProgressHUD *svprogressHud;

AppDelegate.m

@synthesize svprogressHud;

不确定这是否可能,希望有人能帮助我。

这是SVProgress git的链接

4

3 回答 3

2

您可以从视图控制器中做的一件事是获取应用程序委托并将其转换为您的委托类型,如下所示:

#import "MYAPPDelegate.h"
MYAPPDelegate *ad = (MYAPPDelegate *)[[UIApplication sharedApplication] delegate];
[ad.svprogressHud displayOrWhatever];

不是最干净的,但应该完成工作。

于 2013-06-04T23:46:40.590 回答
2

只需将头文件名添加到您的预编译头(<projectname>_Prefix.pch)文件中#ifdef __OBJC__

像:

#ifdef __OBJC__
    #import <UIKit/UIKit.h>
    #import <Foundation/Foundation.h>
    #import "SVProgressHUD.h"
#endif

然后它将使您可以访问所有文件中的文件.....

于 2013-06-05T02:31:04.627 回答
1

只是扩展罗伯茨的答案,为了避免重复获取应用程序委托然后将其转换为 MYAPPDelegate 的代码,我将在您的项目中创建一个带有实用程序函数的头文件/类。

创建名为的新标题AppUtils.h

#import "MYAPPAppDelegate.h"
#ifndef AppName_AppUtils_h
#define AppName_AppUtils_h

static inline MYAPPAppDelegate* AppDelegate() {
    return (MYAPPDelegate *)[[UIApplication sharedApplication] delegate];
}

#endif

无论何时您需要访问这些变量,都可以导入标头AppUtils.h并使用辅助函数。例子:

#import "AppUtils.h"

...

- (void)foo {
    // use app delegate
    UIViewController *rootVC = AppDelegate().rootViewController;
}
于 2013-06-05T01:06:50.093 回答