2016-02-13 4 views
0

Я реализовал пользовательский UITableViewCell (программно). Вот немного моего кода:Пользовательский и динамический контент UITableViewCell

- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier { 

    if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) { 
     // Here I initialize three labels with 2 vertical constraints between each other 
    } 

    return self; 
} 

И когда я запускаю мое приложение, я вижу:

My label 1 

|-vertical constraint-| 

My label 2 

|-vertical constraint-| 

My label 3 

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

My label 1 

|-vertical constraint-| 

|-vertical constraint-| 

My label 3 

Так что мне нужно, чтобы удалить или не инициализировать связанную метку и добавить/удалить правильные ограничения для отображения:

My label 1 

|-vertical constraint-| 

My label 3 

Где я должен это делать? Я не могу сделать это в initWithStyle, потому что я не знаю, если мой текст метки имеет значение еще:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 

    MyCustomCell *cell = [tableView dequeueReusableCellWithIdentifier:@"MyCustomCell"]; 
    cell.name.text = name; 
    cell.username.text = username; 
    cell.description.text = description; 

    return cell 
} 

Спасибо заранее.

ответ

0

У вас должен быть класс модели с именем, именем пользователя и описанием, и вы можете ввести эту модель в ячейку с помощью метода, такого как configureWithModel:. Затем в ячейке вы можете динамически создавать свои ярлыки. В вашем случае я думаю, что вы можете создавать метки в инициализаторе ячейки, и когда модель вводится, вы просто проверяете, какие свойства модели доступны, и вы можете скрыть некоторые ярлыки. Если вы идете с этим подходом, я рекомендую вам реализовать prepareForReuse и сделать ярлыки видимыми снова, иначе, когда ячейка будет повторно использована, а ярлык, который был ранее скрыт, может отображаться скрытым, когда вы этого не хотите.

+0

Звучит хорошо. Я попробую. –

+0

И где я могу добавить/обновить свои ограничения? –

+0

В методе configure, в который вводится модель. –