Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/42.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 将图像绘制到导航栏,并检查是否要绘制某些全局布尔值_Iphone_Objective C_Ios - Fatal编程技术网

Iphone 将图像绘制到导航栏,并检查是否要绘制某些全局布尔值

Iphone 将图像绘制到导航栏,并检查是否要绘制某些全局布尔值,iphone,objective-c,ios,Iphone,Objective C,Ios,我可以通过将其添加到delegate.m类的底部,在导航栏中绘制图像 @implementation UINavigationBar (UINavigationBarCategory) - (void)drawRect:(CGRect)rect { UIImage *img = [UIImage imageNamed: @"nav_bar.png"]; [img drawInRect:CGRectMake(0, 0, self.frame.size.width, self.frame.siz

我可以通过将其添加到delegate.m类的底部,在导航栏中绘制图像

@implementation UINavigationBar (UINavigationBarCategory)
- (void)drawRect:(CGRect)rect 
{
UIImage *img  = [UIImage imageNamed: @"nav_bar.png"];
[img drawInRect:CGRectMake(0, 0, self.frame.size.width, self.frame.size.height)];   
}
@end
到目前为止,这非常有效,但我希望有一些全局布尔变量可以从所有其他ViewController设置,以便在需要时更改导航栏

有人知道一个好的解决方案吗?有没有一种方法可以设置一些全局变量,所有类都可以看到,并且我可以使用上面的方法从中引用

干杯, -代码

使用单例 使用它们对我帮助很大,它看起来像这样:

GlobalSingelton.h:

@interface GlobalSingelton : NSObject

+(GlobalSingelton *)sharedInstance;
@property (nonatomic, assign) BOOL globalBool;
@end
GlobalSingelton.m:

#import "GlobalSingelton.h"

@implementation GlobalSingelton
@synthesize globalBool;

static GlobalSingelton *sharedInstance;

+ (LocationController *)sharedInstance {
@synchronized(self) {
    if (!sharedInstance)
        sharedInstance=[[GlobalSingelton alloc] init];       
}
return sharedInstance;
}


-(id) init {
if (self = [super init]) {
    self.globalBool = NO;
}
return self;
}
@end
然后你可以把那个单身汉叫到任何你想叫的地方

我自己没有测试过,但这是单身的想法


祝你好运

假设你的应用程序代理中有一个全局bool

@property (nonatomic, assign) BOOL globalBool;
您可以像这样从应用程序中的任何类访问应用程序委托

id appDelegate = [[UIApplication sharedApplication] delegate];

BOOL gloBalBool = [appDelegate globalBool];
并设置全局bool变量

[appDelegate setGlobalBool:YES];

您可以使用用户默认值:

[[NSUserDefaults standardUserDefaults] setValue:NO
                             forKey:@"globalBool"];
然后从任何地方访问它:

[[[NSUserDefaults standardUserDefaults] valueForKey:@"globalBool"] boolValue];

在每次对Navbar的drawRect调用中访问它是否会造成很大的性能影响?如果它会导致性能问题,您可以保存一个本地globalBool实例,并将其更新为Viewwillbeen。再次,我看一下appdelegate底部的代码剪报,我是否需要添加一个#include“GlobalSingelton.h”就在@implementaion?@代码之后,我也一直在想。我应该如何从其他文件访问bool?我应该写self.globalBool还是[[GobalSingleton sharedInstance]globalBool]=是?我建议不要使用点符号,因为有时很难看到只读属性,只有在[[GlobalSingleton sharedInstance]setGlobalBool:是]中没有设置器,才能知道这一点从我发布的代码片段中可以看到appDelegate。appdelegate类的包含不是必需的。这能包含在我添加到问题中的代码中吗?我曾经在其他应用程序中使用过上面显示的appDelegate内容,但我认为这在我的案例中是不可能的。我不理解你的评论