如何重新创建默认的UIView与默认的tableView相同:viewForHeaderInSection:?

时间:2010-05-24 16:09:03

标签: iphone objective-c uitableview

我试图实现

- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section

以黑色部分而不是白色颜色获取标题的文本标签,但它看起来与SDK创建的默认颜色不同,我很难看。

如何重新创建与SDK中的UIView完全相同的UIView?

来自Apple文档:

Discussion
表视图对节标题标题使用固定字体样式。如果需要不同的字体样式,请在委托方法tableView:viewForHeaderInSection中返回自定义视图(例如,UILabel对象):

4 个答案:

答案 0 :(得分:13)

虽然这不完全正确,但我发布此信息是希望有人可以改进我的方法。文本是正确的(默认为白色,但您可以更改)。背景渐变和不透明度并不完美(太亮了) - 可能需要进行一些调整。

在此处获取sectionheaderbackground.png:http://img5.imageshack.us/img5/6616/sectionheaderbackground.png

// Create a stretchable image that emulates the default gradient
UIImage *buttonImageNormal = [UIImage imageNamed:@"sectionheaderbackground.png"];
UIImage *stretchableButtonImageNormal = [buttonImageNormal stretchableImageWithLeftCapWidth:12 topCapHeight:0];

// Create the view for the header
CGRect sectionFrame = CGRectMake(0.0, 0.0, 320.0, 22.0);
UIView *sectionView = [[UIView alloc] initWithFrame:sectionFrame];
sectionView.alpha = 0.9;
sectionView.backgroundColor = [UIColor colorWithPatternImage:stretchableButtonImageNormal];

// Create the label
CGRect labelFrame = CGRectMake(10.0, 0.0, 310.0, 22.0);
UILabel *sectionLabel = [[UILabel alloc] initWithFrame:labelFrame];
sectionLabel.text = @"Test section label";
sectionLabel.font = [UIFont boldSystemFontOfSize:18.0];
sectionLabel.textColor = [UIColor whiteColor];
sectionLabel.shadowColor = [UIColor grayColor];
sectionLabel.shadowOffset = CGSizeMake(0, 1);
sectionLabel.backgroundColor = [UIColor clearColor];
[sectionView addSubview:sectionLabel];
[sectionLabel release];

// Return the header section view
return sectionView;

答案 1 :(得分:1)

您可以通过在tableview类中实现以下方法来获取默认的UITableView节标题:

-(UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
{   
    return nil;
}

- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
{
    return 22; //returning 0 hides section headers
}

如果您在应用中使用UISearchDisplayController,这可能会特别有用,您希望以简单的UITableViewStylePlain方式显示搜索结果,而不是,例如,您自定义的UITableViewStyleGrouped主要的表格。然后你可以实现这样的东西:

-(UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
{   
    if ([self.searchDisplayController.searchBar isFirstResponder]) return nil;
    //create and return your custom UIView here
}

答案 2 :(得分:0)

您可以尝试使用shadowColorshadowOffset来模仿它。

我用黑色完成了它,例如使用如下代码:

label.shadowColor = [UIColor whiteColor];
label.shadowOffset = CGSizeMake(1, 1);

通过弄乱颜色和阴影组合,你可以很好地模仿标签。

答案 3 :(得分:0)

如果您想重新创建 默认 /标准 heightForHeaderInSection ,请使用以下命令:

- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
{
    return 44;
}

- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
{
    UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, tableView.frame.size.width, 44)];

    UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(50, 11, tableView.frame.size.width-100, 21)];

    label.text = @"Text";
    label.textColor = [UIColor colorWithRed:76.0/255 green:86.0/255 blue:108.0/255 alpha:1];
    label.backgroundColor = [UIColor clearColor];
    label.font = [UIFont fontWithName:@"Helvetica-Bold" size:17.0];

    [view addSubview:label];

    return view;
}