我有一个基于UITabBarController
的应用。我创建了一个masterVC
类,构成tabBarController
的所有ViewControllers都是masterVC
的子类。我想设置一个UIImageView(这是masterVC
的一个属性),一旦设置在tabBarController
内的每个视图上显示该图像。
如果我实例化每个VC,我可以将图像作为属性传递(这很简单)。但是,在tabBarController ViewControllers之间没有方法可以做到这一点。
我正在尝试做的最简单的概念示例是在tabBarController中的每个视图中的这个示例。必须有更好的方法:
-(void)viewDidAppear:(BOOL)animated
{
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSData *data = [defaults objectForKey:kMainImageData];
if (data) {
self.mainImageView.image = [NSKeyedUnarchiver unarchiveObjectWithData:data];
}
}
-(void)viewWillDisappear:(BOOL)animated
{
NSData *data = [NSKeyedArchiver archivedDataWithRootObject:self.mainImageView.image];
[[NSUserDefaults standardUserDefaults] setObject:data forKey:kMainImageData];
}
答案 0 :(得分:1)
有,创建一个合适的数据源,每个UIViewController
可以请求数据。有一些方法:
答案 1 :(得分:1)
您可以重载方法
-(id) initWithCoder:(NSCoder*)aDecoder
有这样的事情:
self = [super initWithCoder:aDecoder];
if ( self )
{
static UIImage *reuseImage = nil;
if ( reuseImage == nil )
{
//Init reuseImage with your image
}
myImageViewProperty.image = reuseImage;
...
return self;
答案 2 :(得分:1)
如果我理解正确,我认为你可以通过键值观察在你的超类中完成所有这些。
在masterVC
标题中,声明:
@property (strong) UIImage *sharedImage;
在实施中:
@synthesize sharedImage;
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
[self addObserver:self forKeyPath:@"sharedImage" options:NSKeyValueObservingOptionNew context:NULL];
}
return self;
}
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context {
if ([keyPath isEqualToString:@"sharedImage"]) {
self.mainImageView.image = self.sharedImage;
}
}
- (void)dealloc {
[self removeObserver:self forKeyPath:@"sharedImage"];
}
然后,只要在任何子类上设置sharedImage
属性,您的图像视图就会相应地更新其内容。
答案 3 :(得分:0)
我认为最简单的方法是将您发布的viewDidAppear
方法移到masterVC
课程中。然后在子类masterVC
的ViewControllers中,您可以:
如果您没有其他设置可以删除viewDidAppear
方法,则会调用viewDidAppear
中的masterVC
。
OR
将viewDidAppear
更改为以下内容,以便在viewDidAppear
中致电masterVC
,然后执行所有其他设置。
- (void)viewDidAppear:(BOOL)animated
{
[super viewDidAppear:animated];
// your other code...
}