无法设置UITableView单元格标签背景颜色和文本对齐方式

时间:2013-10-09 04:06:00

标签: ios objective-c uitableview

我的方法:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *cellIdentifier = @"Cell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier];
    NSInteger row = indexPath.row;

    if (nil == cell) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:cellIdentifier];
    }

    // Setup row background image (a.k.a the set image)
    NSString *setID = [[self.wallpaperCollectionArray objectAtIndex:row] valueForKey:@"id"];
    NSString *setImageName = [@"s-" stringByAppendingString:setID];
    UIImage *setImage = [UIImage imageNamed:setImageName];

    cell.backgroundView = [[UIImageView alloc] initWithImage:setImage];
    cell.selectedBackgroundView = [[UIImageView alloc] initWithImage:setImage];

    NSString *setName = [[self.wallpaperCollectionArray objectAtIndex:row] valueForKey:@"name"];
    cell.textLabel.text = [setName uppercaseString];
    cell.textLabel.font = [UIFont fontWithName:@"OpenSans" size:20];
    cell.textLabel.textColor = [UIColor whiteColor];
    cell.textLabel.backgroundColor = [UIColor redColor];    // Not working?
    cell.textLabel.textAlignment = NSTextAlignmentCenter;   // Not working?

    return cell;
}

然而,结果相当奇怪,backgroundColortextAlignment未被应用。

meh!

这是一个以编程方式创建的UITableView。我该怎么办?

更新:解决了背景颜色问题。仍然难以居中。

5 个答案:

答案 0 :(得分:0)

 if (nil == cell) {
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue2 reuseIdentifier:cellIdentifier];
}

NSTextAlignment对样式UITableViewCellStyleValue1和UITableViewCellStyleDefault不起作用。

因此,如果您需要在单元格中对齐textLabel,请使用UITableViewCellStyleValue2。

希望它有所帮助!!!

答案 1 :(得分:0)

建议:我建议您不要以编程方式进行此对齐,而是根据您的要求创建包含背景图像和所有其他控件的nib文件的自定义单元格。如果您需要更改UI,这将在将来帮助您。在xib文件中,您也可以直接设置文本对齐方式。

答案 2 :(得分:0)

试试这种方式..

首先设置单元格的框架

- (void)layoutSubviews
{
    CGRect textLabelFrame = self.textLabel.frame;
    [super layoutSubviews]

    textLabelFrame.size.width=250.0f;
    self.textLabel.frame = textLabelFrame;
}

然后我认为它适用于中心对齐。

如果您有任何问题,请与我们联系。

答案 3 :(得分:0)

通过将<{1}}更改为

中的UITableViewCellStyleValue1,找到了居中问题的解决方案
UITableViewCellStyleDefault

答案 4 :(得分:0)

我建议您添加自己的UILabel作为子视图并仅使用它,而不是cell.textLabel。这样,您就可以完全控制(没有任何干扰)文本对齐和视图框架。

示例:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *cellIdentifier = @"Cell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier];
    NSInteger row = indexPath.row;

    if (nil == cell) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:cellIdentifier];

        /* 
         * Make the label cover the entire bounds of the cell, no matter how the cell resizes
         * (Old school autoresizing still works because it gets translated into constraints)
         */
        UILabel *label = [[UILabel alloc] initWithFrame:cell.contentView.bounds];
        label.autoresizingMask = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth;

        /*
         * No need to set this stuff repeatedly, let's just do it
         * once on creation of the label
         */
        label.font = [UIFont fontWithName:@"OpenSans" size:20];
        label.textColor = [UIColor whiteColor];
        label.backgroundColor = [UIColor redColor];    // Should work now
        label.textAlignment = NSTextAlignmentCenter;   // Should work now

        // Set a tag so we can find this label later
        label.tag = 42;
    }

    // Setup row background image (a.k.a the set image)
    NSString *setID = [[self.wallpaperCollectionArray objectAtIndex:row] valueForKey:@"id"];
    NSString *setImageName = [@"s-" stringByAppendingString:setID];
    UIImage *setImage = [UIImage imageNamed:setImageName];

    cell.backgroundView = [[UIImageView alloc] initWithImage:setImage];
    cell.selectedBackgroundView = [[UIImageView alloc] initWithImage:setImage];

    NSString *setName = [[self.wallpaperCollectionArray objectAtIndex:row] valueForKey:@"name"];

    // Find our custom UILabel and configure it
    UILabel *label = (id)[self.contentView viewWithTag:42];
    label.text = [setName uppercaseString];

    return cell;
}

更好的是,改为使用UITableViewCell子类。它使您的代码更有条理。在这种情况下,您可以使用@ user1673099的建议。