2012-06-18 102 views
0

我有一個TableView 10個部分,從一個plist文件加載,我有開關,其中一些部分可以關閉。我需要爲每個部分設置特定的背景顏色,並且可以禁用該部分。如何爲特定部分標題設置背景顏色?

例子:

爲第Black我需要設置black background

爲第Red我需要設置red background

等等...

-(UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section 
{ 
    UIView *tempHeaderView=[[UIView alloc]initWithFrame:CGRectMake(0,0,320,44)]; 
    tempHeaderView.backgroundColor=[UIColor blackColor]; 

    [tempHeaderView addSubView: tempHeaderLabel]; 
    return tempHeaderView; 
} 
+0

除非您使用ARC(自動引用計數),否則您的代碼正在泄漏tempHeaderView。在這種情況下查看我的答案。 –

+1

我使用ARC ...謝謝! –

+1

使用ARC的+1 :) –

回答

3

保持一個NSArrayUIColor對象作爲你的類的一個實例變量(視圖控制器充當委託/數據源),假設你稱之爲sectionColors。您可以從plist中的值初始化此數組中的顏色,或者對顏色進行硬編碼。

然後,使用此代碼:

-(UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section 
{ 
    UIView *tempHeaderView=[[UIView alloc]initWithFrame:CGRectMake(0,0,320,44)]; 


    // This changed: 
    tempHeaderView.backgroundColor = [sectionColors objectAtIndex:section]; 

    [tempHeaderView addSubView: tempHeaderLabel]; 

    return tempHeaderView; 
    // Use 'return [tempHeaderView autorelease];' in a non-ARC environment 
} 

這是你怎麼能初始化數組:

// Assuming your table has three sections (indices 0 through 2) 

UIColor* colorForSection0 = [UIColor colorwithRed:redValue0 green:greenValue0 blue:blueValue0 alpha:1.0]; 
// redValue0, etc. are floats between 0.0 and 1.0 that you can read from a .plist 
// Alternatively, store them as integers between 0 and 255, and divide them by 255.0 
// and store on CGFloat variables before creating color. 

// ...Do the same for the other colors... 

// Now that you have the colors, create array and store in ivar 'sectionColors' 
sectionColors = [[NSArray alloc] initWithObjects: 
    ColorforSection0, ColorForSection1, colorForSection2, nil]; 

(上面的代碼應該去表視圖數據源的初始化中)

+0

UIColor不能直接存儲在plist中,但是這個概念可以很容易地適用於在plist中使用字符串來表示使用哪種顏色。 –

+0

當然......但是你可以讀取plist中的R,G,B值並相應地初始化顏色。但是這個想法是一樣的:他需要一個UIColor數組並且在索引'section'處選擇顏色。我沒有詳細說明他應該如何創建陣列。 –

+0

我剛剛編輯了答案,以清楚說明你不能直接從.plist讀取UIColor。 –

2

您需要使用傳入部分並將其與plist文件中的某個部分相關聯。你可能會加載一個「部分」的字典,因爲它存在於plist中(可能是基於它在數組中的位置與部分相同的方式加載),然後在if()中使用valueForKey:@「enabled」檢查並相應地設置你的狀態。