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

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

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

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"CardCell";
    CardTableViewCell *cell = (CardTableViewCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];

    if (cell == nil)
    {
        //cell = [[CardTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"CardCell"];
        cell = [[[NSBundle mainBundle]loadNibNamed:@"CardCell" owner:self options:nil]objectAtIndex:0];

    }

    // Configure the cell...
    NSManagedObject *card = [self.cards objectAtIndex:indexPath.row];
    [cell.cardName setText:[card valueForKey:@"name"]];
    [cell.type setText:[card valueForKey:@"attribute"]];
    [cell.attack setText:[card valueForKey:@"attack"]];
    [cell.defense setText:[card valueForKey:@"defense"]];
    [cell.species setText:[card valueForKey:@"species"]];
    [cell.starLevel setText:[card valueForKey:@"stars"]];
    cell.type.layer.cornerRadius = cell.type.bounds.size.height / 8;


    UIImage *cardImage = [UIImage imageWithData:[card valueForKey:@"thumb"]];
    [cell.cardImage setImage:cardImage];

    return (UITableViewCell *)cell;
}

Текст и изображение карточки отображаются правильно.

0
meltonCG 31 Дек 2017 в 20:20

2 ответа

Лучший ответ

Ячейка не имеет рамки в cellForRowAtIndexPath, поэтому радиус угла не установлен. В этом случае вы должны установить радиус угла в willDisplayCell.

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath {
    if (yourCellShouldHaveRoundedCorners) {
        cell.layer.cornerRadius = cell.bounds.size.height / 8;
    }
}

Цвет фона метки должен работать в cellForRowAtIndexPath.

Кроме того, я вижу, что вы установили множество свойств для ячейки в cellForRowAtIndexPath (например, тип, атака, защита и так далее). Поскольку у вас уже есть настраиваемая ячейка, было бы лучше создать свойство NSManagedObject для ячейки и установить все эти свойства в установщике этого объекта.

Таким образом, вам нужно будет только вызвать cell.managedObject = card, и установщик установит другие свойства.

Этот подход более ориентирован на модель и может избавить вас от дублирования кода.

3
Dog 31 Дек 2017 в 22:21

Попробуйте использовать фиксированное число, поскольку cell.type.bounds.size.height не будет отображать правильное значение в cellForRowAt

 cell.type.layer.cornerRadius = 10 ;

 cell.type.clipsToBounds = YES;

ИЛИ добавьте это в класс ячейки

 -(void)layoutSubviews
 {
     self.type.layer.cornerRadius = self.type.bounds.size.height / 8;
 }

Что касается цвета, он будет отлично работать в cellForRowAt вот так

 if(yourLogic)
 {
    cell.type.backgroundColor = [UIColor redColor];

 }
 else
 {
    cell.type.backgroundColor = [UIColor greenColor];
 }
0
Sh_Khan 31 Дек 2017 в 17:43