2012-11-13 118 views
0

我有一個基於UITabBarController的應用程序。我已經創建了一個masterVC類,構成tabBarController的所有ViewController都是masterVC的子類。我想設置一個UIImageView(這是一個masterVC的屬性),一旦設置在tabBarController內的每個視圖上顯示該圖像。在TabBar中的視圖控制器之間共享UIImageView

如果我正在實例化每個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]; 
} 

回答

1

那麼有,創建一個合適的數據源,其中每個UIViewController可以請求數據。有一些方法:

  • 將圖像保存到磁盤,使用助手類來檢索它。
  • 將圖像保存爲單例的屬性並檢索它。
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; 
+0

丹,我不熟悉initWithCoder方法。將這部分:'//初始化圖像與你的圖像'是我最初設置圖像? – Eric

+0

@Eric是的,它會,但是你初始化它,如果你是從一個資源加載它,或從一些下載的數據,或什麼。'initWithCoder'方法是在視圖控件上調用的init方法,通過XIB或故事板實例化 –

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財產上的任何子類的設置,你的形象就會更新其內容相應。

0

我認爲最簡單的做法是將您發佈到masterVC課程中的viewDidAppear方法。然後在你的ViewControllers子類化masterVC您可以:

取出viewDidAppear方法,如果您有沒有其他的設置做的,它會再調用viewDidAppear是在你的masterVC

OR

更改viewDidAppear以下內容,以便它會調用masterVCviewDidAppear然後把你所有的其他設置。

- (void)viewDidAppear:(BOOL)animated 
{ 
    [super viewDidAppear:animated]; 

    // your other code... 
} 
相關問題