0

我有一个TableView从 plist 文件加载的 10 个部分,并且我有一些可以关闭部分部分的开关。我需要为每个部分设置特定的背景颜色,因为可以禁用该部分。

例子:

对于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;
}
4

2 回答 2

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];

(上面的代码应该放在表视图数据源的初始化程序中)

于 2012-06-18T06:28:25.483 回答
2

您将需要使用传入的部分并将其与 plist 文件中的部分之一相关联。您可能会加载 plist 中存在的“部分”的字典(可能基于它在与部分相同的数组中的位置加载),然后在 if() 中使用 valueForKey:@"enabled" 或类似内容检查并相应地设置您的状态。

于 2012-06-18T06:29:21.927 回答