Как загрузить изображения в Custom UITableViewCell? - PullRequest
0 голосов
/ 03 апреля 2009

Вот что мне нужно сделать:

Загрузка изображений размером 66px x 66px в ячейки таблицы в таблице MainViewController. Каждый TableCell имеет уникальное изображение.

Но как? Будем ли мы использовать cell.image?

cell.image = [UIImage imageNamed:@"image.png"];

Если так, то где? Требуется ли оператор if / else?

Для загрузки меток каждой ячейки MainViewController использует NSDictionary и NSLocalizedString, например, так:

 //cell one
    menuList addObject:[NSDictionary dictionaryWithObjectsAndKeys:
    NSLocalizedString(@"PageOneTitle", @""), kTitleKey,
    NSLocalizedString(@"PageOneExplain", @""), kExplainKey, nil]];

    //cell two
    menuList addObject:[NSDictionary dictionaryWithObjectsAndKeys:
    NSLocalizedString(@"PageOneTitle", @""), kTitleKey,
    NSLocalizedString(@"PageOneExplain", @""), kExplainKey, nil]];

...

 // this is where MainViewController loads the cell content
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
MyCustomCell *cell = (MyCustomCell*)[tableView dequeueReusableCellWithIdentifier:kCellIdentifier];

if (cell == nil)
{
cell = [[[MyCustomCell alloc] initWithFrame:CGRectZero reuseIdentifier:kCellIdentifier] autorelease];

}

...

    // MyCustomCell.m adds the subviews
- (id)initWithFrame:(CGRect)aRect reuseIdentifier:(NSString *)identifier
{
self = [super initWithFrame:aRect reuseIdentifier:identifier];
if (self)
{
// you can do this here specifically or at the table level for all cells
self.accessoryType = UITableViewCellAccessoryDisclosureIndicator;

// Create label views to contain the various pieces of text that make up the cell.
// Add these as subviews.
nameLabel = [[UILabel alloc] initWithFrame:CGRectZero]; // layoutSubViews will decide the final frame
nameLabel.backgroundColor = [UIColor clearColor];
nameLabel.opaque = NO;
nameLabel.textColor = [UIColor blackColor];
nameLabel.highlightedTextColor = [UIColor whiteColor];
nameLabel.font = [UIFont boldSystemFontOfSize:18];
[self.contentView addSubview:nameLabel];

explainLabel = [[UILabel alloc] initWithFrame:CGRectZero]; // layoutSubViews will decide the final frame
explainLabel.backgroundColor = [UIColor clearColor];
explainLabel.opaque = NO;
explainLabel.textColor = [UIColor grayColor];
explainLabel.highlightedTextColor = [UIColor whiteColor];
explainLabel.font = [UIFont systemFontOfSize:14];
[self.contentView addSubview:explainLabel];

  //added to mark where the thumbnail image should go 
  imageView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 66, 66)];
  [self.contentView addSubview:imageView];
}

return self;
}

Ответы [ 4 ]

6 голосов
/ 03 апреля 2009

Если изображение будет одинаковым для каждой ячейки, т. Е. Оно является частью ячейки этого типа, вы можете загрузить его в init MyCustomCell, используя self.image = [UIImage imageNamed: "blabla"];

В противном случае, если изображение будет различным для разных ячеек, было бы более логично поместить его в tableView: cellForRowAtIndexPath:

3 голосов
/ 08 февраля 2011

Да, cell.image устарела. используйте вместо этого imageview.image в TableViewCell по умолчанию. Я не уверен, почему настраиваемая ячейка была обязана делать то, что стандартная ячейка tableview уже делает (title, subtitle и изображение, используя UITableViewStyleSubtitle)

1 голос
/ 26 марта 2010

Лучшим подходом, чем беспорядок в if-else, было бы поместить ваши изображения на NSMutableArray в правильном порядке, а затем просто использовать

cell.image = [myImages objectAtIndex: indexPath.row];

1 голос
/ 04 апреля 2009

Теперь работает. Вы были правы, Сементо, насчет этого tableView:cellForRowAtIndexPath:

indexPath.row было то, что я пропустил. Рабочий результат выглядит так:

        - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
    {
        MyCustomCell *cell = (MyCustomCell*)[tableView dequeueReusableCellWithIdentifier:kCellIdentifier];

        if (cell == nil)
        {
            cell = [[[MyCustomCell alloc] initWithFrame:CGRectZero reuseIdentifier:kCellIdentifier] autorelease];

        }

if (indexPath.row == 1)
{
cell.image = [UIImage imageNamed:@"foo.png"];
}
else if (indexPath.row == 2)
cell.image = [UIImage imageNamed:@"bar.png"];
}
...
else
{
cell.image = [UIImage imageNamed:@"lorem.png"];
}

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