2015-03-03 2 views

ответ

6

Нет, Apple не предоставляет свойство стиля для UITableViewCell. Но у вас есть пара вариантов.

  1. Создайте свой собственный подкласс UITableViewCell, который сохраняет стиль в собственности, когда initWithStyle называется.

    @property UITableViewCellStyle cellStyle; 
    
    // ... 
    
    - (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier { 
        self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]; 
        if (self) { 
         self.cellStyle = style; 
        } 
        return self; 
    } 
    
  2. Сохраните стиль вручную для метки ячейки. Затем вы можете проверить тег на ячейке, когда вы устанавливаете высоту ячейки. Например:

    UITableViewCell *cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:nil]; 
    cell.tag = UITableViewCellStyleValue1; 
    
+1

+1. Первый вариант - это то, что я сделал бы. Подклассификация не только позволяет вам сохранять и получать доступ к информации в вопросе, поэтому очень удобно сохранять и получать доступ к чему-либо еще, что вам нужно связать с каждой ячейкой. – Nerrolken

0

Да, вы можете. Вы можете получить доступ к методу style в вашем представлении таблицы, чтобы вернуть текущий стиль. Here is a link to apple's documentation.

Edit:

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

cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:Cellidentifier]; 
+0

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

+0

Я обновил свой ответ. См. Мое редактирование. – Chase

+1

Хм. Это то, чего я боялся, но что, если я хочу реализовать heightForRowAtIndexPath, и я хочу сделать что-то другое в зависимости от типа ячейки? –

0

не непосредственно, или по крайней мере не 100% надежно ...

Когда вы [cell initWithStyle:style reuseIdentifier:foo] выбранный стиль просто используется для (пере) макет содержимого ячейки , в частности макет textLabel vs detailTextLabel. После этого стиль больше не имеет значения ... Но то, что вы может do, в конце концов, посмотрим на результирующий макет, а именно на рамки textLabel vs detailTextLabel, и выведите из их позиции & размер, который, по-видимому, был выбран изначально выбранного стиля [я говорю: вероятно, потому что, если textLabel или detailTextLabel ничтожны, нет никакого способа, например, отличить UITableViewCellStyleDefault от UITableViewCellStyleValue1 от UITableViewCellStyleSubtitle, потому что у вас просто есть textLabel, и все они выглядят одинаково].

Это говорит, что-то вроде этого может быть достаточно для ваших нужд (после того, как [cell layoutSubviews] то есть):

if (!CGRectGetHeight(cell.detailTextLabel.frame) { 
    // UITableViewCellStyleDefault, b/c it never shows a detailTextLabel 
} elseif (CGRectGetMinY(cell.detailTextLabel.frame) == CGRectGetMinY(cell.textLabel.frame)) { 
    // UITableViewCellStyleValue1 or UITableViewCellStyleValue2 
} else { 
    // UITableViewCellStyleSubtitle 
} 

Опять же, YMMV ... это предполагает, что ваш TextLabel и detailTextLabel являются как не-ноль.

BTW Вы могли бы еще отличить UITableViewCellStyleValue1 от UITableViewCellStyleValue2, глядя на TextAlignment наклеек, но на самом деле нет способа узнать, что они не были повторно выровнены программно-то после того, как клетка была initWithStyle'd.

Сказав все это, если вы хотите на 100% надежно проверить, в каком стиле был настроен ваш UITableViewCell, тогда ваша самая безопасная ставка - сделать простой подкласс, который переопределяет -initWithStyle:reuseIdentifier: и сохраняет это в новое имущество; т.е. вариант 1 принятого ответа.

1

По какой-то странной причине Apple, не включает в себя недвижимость в их общественном заголовке, однако, вы можете просто позвонить valueForKey получить:

UITableViewCellStyle style = [tableCell valueForKey:@"tableViewStyle"]; 

При использовании valueForKey касается вас, и вы используете раскадровки вместо этого вы могли бы подкласс и переопределение:

- (nullable instancetype)initWithCoder:(NSCoder *)aDecoder{ 
    self = [super initWithCoder:aDecoder]; 
    if (self) { 
     _cellStyle = [aDecoder decodeIntForKey:@"UITableViewCellStyle"]; 
    } 
    return self; 
} 

Другие ответы показывают, как получить его для программно созданных ячеек.

Смежные вопросы