2010-09-25 37 views
2

我有一個小的UIView,我用網絡填充一些字符串數據。 我想加載一次。這就是爲什麼我在appdelegate類中調用它。如何在選項卡中使用相同的UIView?

CurrencyView * currView;

@property(nonatomic,retain)CurrencyView * currView;

應用didFinishLaunchingWithOptions:

CurrencyView *view=[[CurrencyView alloc] initWithFrame:CGRectMake(0, 0, 100, 20)]; 
self.currView = view; 
[view release]; 

然後我把它在每一個視圖控制器(在標籤中)。

AppDelegate_iPhone *delegate = [AppDelegate_iPhone sharedAppDelegate]; 
    self.currencyView= delegate.currView 
    [self.view addSubview: currencyView]; 

當我在選項卡中移動時,currView從選項卡移動到其他選項卡。當回顧前一個選項卡時,currencyview消失了。它停留在最後一個選項卡上。我不知道爲什麼。

我應該如何在所有視圖中放置currview?

回答

0

你不能在同一時刻把UIView放到不同的控制器上。當你將它添加到另一個控制器/視圖時,它將從前一箇中刪除。

所以,當你改變標籤的^^你應該重新添加它(用委託的方法,例如,這取決於你使用的是什麼;-))

我認爲沒有其他的解決方案但如果有人有更好的想法,它可以讓我感興趣。

+0

即時通訊我不把它放在同一時刻,當我移動到第二個選項卡,在其viewdidload方法,我使用[self.view addSubview:currencyView];但currview從第一個選項卡viewconroller中刪除。 – tester 2010-09-25 21:58:31

+0

是的,這是我想說的。你不能在同一時間在兩個不同的地方有一個UIView。(或者你必須做2個不同的分配)。 – Vinzius 2010-09-25 22:00:17

+0

嗯,爲什麼?不能在不同的意見使用相同的uiviews副本?我也試圖爲每個標籤viewcontrollers(CurrnecyView alloc初始化等),然後我設置「self.currenyView = delegate.currView),但同樣的事情。爲什麼不能使用相同的uiview?我想我可以使它複製,我不能嗎? – tester 2010-09-25 22:03:21

0

如果你想有相同的看法例如,您可以檢索從視圖 - 控制viewWillAppear中的的appdelegate實例:方法,檢查視圖的上海華盈是不是零,並最終從上海華刪除它,然後將其添加到當前的觀點。這樣

-(void)viewWillAppear { 

AppDelegate_iPhone *delegate = [AppDelegate_iPhone sharedAppDelegate]; 
CurrencyView *cView = [delegate currView]; 
if(nil!=[cView superview) { 
[cView removeFromSuperview]; 
} 
[[self view]addSubview:cView]; 
} 

東西也許你可以在viewWillDisappear從上海華刪除currView:方法,而不是在上面。

儘管如此,這仍然是非常容易出錯,不太乾淨。如果您只分配兩個CurrencyView實例並讓它們共享公共數據/模型,那將會更好。 如果內存不足,我懷疑單個視圖會殺死你的應用程序,但是如果是這種情況,還有其他方法可以減少內存佔用,請參閱Apple關於內存管理和視圖控制器生命週期的文檔。

0

如果你想要的是視圖的副本,* CVIEW您@property的說法應該是

@Property (nonatomic, copy) UIView* cView; 

如果您有什麼反而是

@Property (nonatomic, retain) UIView* cView; 

您正在嘗試共享多個視圖中的相同對象,這是你無法做到的。前者每次你從超級視圖中抓取它,你都會製作一份它的副本,我認爲這將起作用。

相關問題