2010-08-27 13 views
0

我正在使用簡單地將背景顏色設置爲藍色的UIView對象。這可以在第一次運行代碼時正常工作,但再次運行changeBackgroundColor mehod(從按鈕操作)不會將顏色更改爲紅色,即使調試代碼清楚地顯示該方法按預期運行。更新UIView上的顏色的新手問題

請有人可以解釋爲什麼視圖顏色不更新?

頁眉:

@interface colorClass : NSObject { 
    UIView *myView; 
} 

@implementation 
... 
-(UIView *)changeBackgroundColor { 

    myView = [[UIView alloc] initWithFrame:CGRectMake(100, 0, 500, 245)]; 

    static int counter = 1; 
    if (counter++ %2){ 
     [mediaView setBackgroundColor:[UIColor blueColor]]; 
    }else { 
     [mediaView setBackgroundColor:[UIColor redColor]]; 

    } 
    return myView; 
} 
+0

你是做什麼用的UIView此方法返回?每次調用這個方法時都會創建新的視圖實例,你確定這就是你真正想做的事情嗎? – Vladimir 2010-08-27 11:53:10

+0

不,我試圖抓住這一個視圖實例,所以我可以改變顏色。我還沒有找到任何方法來做到這一點。我應該在其他地方設置myView alloc嗎? – user432865 2010-08-27 12:08:23

+1

...並且您將背景顏色設置爲mediaView - 它不在任何地方聲明。是的,我認爲你應該初始化你的視圖在一些初始化方法(例如loadView或viewDidLoad),除非你有理由在每次點擊創建新的視圖實例 – Vladimir 2010-08-27 12:12:26

回答

0

感謝兩人指引我在正確的方向。最後,我需要創建一個新的init方法,現在代碼正如我所希望的那樣工作。

- (ID)的init {

myView  = [[UIView alloc] initWithFrame:CGRectMake(100, 0, 500, 245)]; 
return self; 

}

0

有YOUT改變顏色後試圖[yourView setNeedsDisplay]

編輯:

- (UIView的*)changeBackgroundColorof:(UIView的*)查看{

static int counter = 1; 
if (counter++ %2){ 
    [view setBackgroundColor:[UIColor blueColor]]; 
}else { 
    [view setBackgroundColor:[UIColor redColor]]; 

} 
    return view; 
} 

你必須初始化你的看法elswhere然後用

yourView = [[UIView alloc] initWithFrame:CGRectMake(100, 0, 500, 245)]; 

和呼叫

yourview = [self changeBackgroundColorof:yourview]; 
+0

嗨,感謝您的幫助,但似乎沒有任何效果 – user432865 2010-08-27 11:49:15

+0

弗拉基米爾指出,每次調用此方法時都會創建一個新視圖。因此,您並未修改現有視圖,而只是初始化一個新視圖。新的視圖會有紅色的背景色,但我認爲你並沒有將這個視圖添加到超級視圖中,對嗎?我編輯了我的帖子,爲你提供了一個暗示 – Gauloises 2010-08-27 12:06:33