Невозможно изменить прозрачную BG в пользовательском UITableViewCell (представление сгруппированной таблицы) - PullRequest
0 голосов
/ 26 июля 2011

В UITableViews (сгруппированных и простых) есть несколько сообщений о различных проблемах с фонами ячеек (пользовательских или стандартных), но я не могу найти упоминания об этой конкретной проблеме.

По сути, у меня есть UITableView со сгруппированным стилем.

Проблема: Я не могу получить в моих пользовательских ячейках ничего, кроме прозрачного фона.

Вот как выглядит мое табличное представление до того, как я реализую свои пользовательские ячейки (то есть это просто обычное сгруппированное табличное представление):

enter image description here

Стандартный, обычный сгруппированный Tableview. Отлично. Но я хочу нестандартные ячейки.

Итак, я построил собственную ячейку, которая выглядит следующим образом:

enter image description here

С этой иерархией:

enter image description here

А это фоновые метаданные для ячейки:

enter image description here

К сожалению, независимо от того, что я делаю, меняю ли фон на белый, прозрачный или даже на черный, ничего не меняет, мой вид таблицы все равно выглядит так:

enter image description here

(это фон табличного представления, между прочим, то есть эти ячейки теперь прозрачны).

И, конечно, я не могу решить эту проблему, изменив фон View , который я добавил в ячейку, потому что тогда все просто выглядит так (обратите внимание на отсутствие закругленных углов, и т.д.):

enter image description here

Что явно некрасиво и неприемлемо.

Как заставить клетки иметь нормальный белый фон, как у стандартных ячеек по умолчанию? Странно то, что для приложения на прошлой неделе я создал собственную ячейку, следуя точно той же процедуре, и эти фоны выглядели белыми просто отлично.

Что я здесь пропустил? Все, что мне нужно, чтобы мои пользовательские ячейки имели белый фон, который соответствует изогнутым верхним и нижним углам сгруппированного табличного представления. Я видел белый фон в других реализациях, поэтому я знаю, что это возможно с пользовательской ячейкой. Но что-то здесь не работает!

Я рад опубликовать любой код, но не уверен, что будет нужно / нужно. Вот мой метод cellForRowAtIndexPath (это просто базовая версия данных tableView: cellForRowAtIndexPath:):

- (UITableViewCell *)tableView:(UITableView *)tableView cellForManagedObject:(NSManagedObject *)managedObject
{
    static NSString *ReuseIdentifier = @"customSummaryCell";

    CustomSummaryTableViewCell *cell = (CustomSummaryTableViewCell *)[tableView dequeueReusableCellWithIdentifier:ReuseIdentifier];
    if (cell == nil) {
        NSArray *nibObjects = [[NSBundle mainBundle] loadNibNamed:@"CustomSummaryTableViewCell" owner:nil options:nil];
        for (id currentObject in nibObjects) {
            if([currentObject isKindOfClass:[CustomSummaryTableViewCell class]])
            {
                cell = (CustomSummaryTableViewCell *)currentObject;
            }
        }
    }

    cell.leftLabel.text = @"Some data";
    cell.rightLabel.text = @"Some Info"; 

    return cell;
}

Мои файлы классов должны быть в основном неизменными, но вот они. Файл .h для моего пользовательского класса ячеек:

импорт

@interface CustomSummaryTableViewCell : UITableViewCell {

    IBOutlet UIView *backgroundView;
    IBOutlet UILabel *leftLabel;
    IBOutlet UILabel *rightLabel;
}

@property (nonatomic, retain) IBOutlet UIView *backgroundView;
@property (nonatomic, retain) IBOutlet UILabel *leftLabel;
@property (nonatomic, retain) IBOutlet UILabel *rightLabel;


@end

И файл .m:

импорт "CustomSummaryTableViewCell.h"

@implementation CustomSummaryTableViewCell
@synthesize backgroundView;
@synthesize leftLabel;
@synthesize rightLabel;

- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{
    self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
    if (self) {
        // Initialization code
    }
    return self;
}

- (void)setSelected:(BOOL)selected animated:(BOOL)animated
{
    [super setSelected:selected animated:animated];

    // Configure the view for the selected state
}

- (void)dealloc
{
    [leftLabel release];
    [rightLabel release];
    [backgroundView release];
    [super dealloc];
}

@end

Обратите внимание, что я изменил класс ячейки в xib на CustomSummaryTableViewCell

Любая помощь будет высоко ценится здесь, не знаю, в чем проблема, и это сводит меня с ума !!

Заранее спасибо.

Ответы [ 2 ]

1 голос
/ 26 июля 2011

Я обнаружил, что добавить подпредставления в ячейку проще, чем реализовать пользовательские ячейки. В вашем случае, с двумя метками в одной ячейке, это выглядит достаточно просто.

РЕДАКТИРОВАТЬ - упрощенный пример

-(UITableViewCell *) tableView:(UITableView *) tableView cellForRowAtIndexPath:(NSIndexPath *) indexPath
{
    . . .
    UILabel *label2 = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, labelWidth, labelHeight)];
    [label2 setText:@"Something"];

    [[cell contentView] addSubview:label2];

    return cell;
}

РЕДАКТИРОВАТЬ - Вот реальный, полный пример:

-(UITableViewCell *) tableView:(UITableView *) tableView cellForRowAtIndexPath:(NSIndexPath *) indexPath
{
    static NSString *reusableCell = @"reusableCell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:reusableCell];

    if(cell == nil)
    {        
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:reusableCell] autorelease];

        thumbnail = [[UIImageView alloc] initWithFrame:CGRectMake(5, 5, 106, 81)];

        feedTitle = [[UILabel alloc] initWithFrame:CGRectMake(116, 3, [IOSDevice screenWidth] - 140, 25)];
        postDate = [[UILabel alloc] initWithFrame:CGRectMake(116, 10, [IOSDevice screenWidth] - 140, 50)];
        description = [[UILabel alloc] initWithFrame:CGRectMake(116, 45, [IOSDevice screenWidth] - 140, 50)];

        // setting tag reminders so we can identify the element to replace
        [thumbnail setTag:1];
        [feedTitle setTag:2];
        [postDate setTag:3];
        [description setTag:4];

        [[cell contentView] addSubview:thumbnail];
        [[cell contentView] addSubview:feedTitle];
        [[cell contentView] addSubview:description];
        [[cell contentView] addSubview:postDate];

        [thumbnail release];
        [feedTitle release];
        [description release];
        [postDate release];
    }

    thumbnail = (UIImageView *)[[cell contentView] viewWithTag:1];
    feedTitle = (UILabel *)[[cell contentView] viewWithTag:2];
    postDate = (UILabel *)[[cell contentView] viewWithTag:3];
    description = (UILabel *)[[cell contentView] viewWithTag:4];

    [feedTitle setBackgroundColor:[UIColor clearColor]];
    [feedTitle setFont:[UIFont fontWithName:@"Helvetica-Bold" size:16]];
    [feedTitle setTextColor:[UIColor colorWithRed:0.215 green:0.215 blue:0.215 alpha:1.0]];

    [description setBackgroundColor:[UIColor clearColor]];
    [description setFont:[UIFont fontWithName:@"Helvetica" size:12]];
    [description setTextColor:[UIColor colorWithRed:0.328 green:0.328 blue:0.328 alpha:1.0]];
    [description setNumberOfLines:2];
    [description setLineBreakMode:UILineBreakModeWordWrap];

    [postDate setBackgroundColor:[UIColor clearColor]];
    [postDate setFont:[UIFont fontWithName:@"Helvetica" size:12]];
    [postDate setTextColor:[UIColor colorWithRed:0.707 green:0.180 blue:0.141 alpha:1.0]];

    [thumbnail setImage:[[items objectAtIndex:[indexPath row]] objectForKey:@"thumb"]];

    [feedTitle setText:[[items objectAtIndex:[indexPath row]] objectForKey:@"title"]];
    [description setText:[[items objectAtIndex:[indexPath row]] objectForKey:@"summary"]];

    // Format date
    NSDateFormatter *dateFormatter = [[[NSDateFormatter alloc] init] autorelease];  
    [dateFormatter setDateStyle:NSDateFormatterLongStyle];
    [dateFormatter setTimeStyle:NSDateFormatterShortStyle];

    [postDate setText:[dateFormatter stringFromDate:[[items objectAtIndex:[indexPath row]] objectForKey:@"date"]]];

    [cell setSelectionStyle:UITableViewCellSelectionStyleNone];
    [cell setAccessoryType:UITableViewCellAccessoryDisclosureIndicator];

    if([feedList contentOffset].y < -50)
    {
        shouldUpdate = TRUE;

        [activityIndicator stopAnimating];

        [feedList setContentOffset:CGPointMake(0, -30) animated:NO];
        [self loadData];

        loadingLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, -25, [IOSDevice screenWidth], 20)];
        [loadingLabel setText:@"Loading New Data"];
        [loadingLabel setTextAlignment:UITextAlignmentCenter];
        [loadingLabel setBackgroundColor:[UIColor clearColor]];
        [loadingLabel setTextColor:[UIColor colorWithRed:0.215 green:0.215 blue:0.215 alpha:1.0]];
        [loadingLabel setFont:[UIFont fontWithName:@"Helvetica-Bold" size:14]];

        reloadingSpinner = [[UIActivityIndicatorView alloc] initWithFrame:CGRectMake(70, -25, 20, 20)];
        [reloadingSpinner setActivityIndicatorViewStyle:UIActivityIndicatorViewStyleGray];
        [reloadingSpinner startAnimating];
        [reloadingSpinner setHidesWhenStopped:YES];

        [feedList addSubview:reloadingSpinner];
        [feedList addSubview:loadingLabel];
    }

    return cell;
}
0 голосов
/ 26 июля 2011

Проверьте альфа и фон вашего представления UITableViewCell в nib-файле.

Альфа должна быть 1.0.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...