Iphone 将图像绘制到导航栏,并检查是否要绘制某些全局布尔值
我可以通过将其添加到delegate.m类的底部,在导航栏中绘制图像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
@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内容,但我认为这在我的案例中是不可能的。我不理解你的评论