2012-11-29 2 views
0

Я хотел бы знать, если это возможно:Как обернуть текст в UITableViewCell, используя только IB (без кода)?

  • при просмотре таблицы, содержащую несколько комментариев с поста, каждый комментарий может иметь разную длину - так ячейки таблицы должны изменить размер по вертикали, чтобы вместить больше текста.

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

Используя IB, мой клеток использует:

  • стиль: субтитры
  • режим: масштаб, чтобы соответствовать высоте
  • строки: по умолчанию

Мои «Название "label (что является пе, что следует расширить):

  • разрывы строк: перенос слов
  • линии: 0

С выше, я на самом деле получить, чтобы увидеть несколько строк текста, но строки не менять размеры соответственно - поэтому текст из нескольких строк перекрывается.

Можно ли изменить размеры строк по вертикали без кодирования этого в моем контроллере?

CommentViewController.m

#import "CommentViewController.h" 

@implementation CommentViewController 
@synthesize  commentsArray; 

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
} 

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView 
{ 
    return 1; 
} 

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
{ 
    return commentsArray.count; 
} 

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

    NSDictionary *comment  = [commentsArray objectAtIndex:indexPath.row]; 
    NSString  *commentText = [comment objectForKey:@"comment_text"]; 
    NSString  *commentAuthor = [comment objectForKey:@"comment_author_name"]; 

    cell.textLabel.text  = commentText; 
    cell.detailTextLabel.text = [NSString stringWithFormat:@"by %@", commentAuthor]; 

    return cell; 
} 

@end 
+1

Я 99% уверен (я всегда мог быть неправым , конечно), что это невозможно с помощью Interface Builder, особенно если ваши метки имеют разную высоту. Есть ли какая-то особая причина, почему вы пытаетесь избежать использования кода? –

+0

просто для простоты ... и потому, что я не могу реализовать код из связанного ответа, о котором я говорил ... Я попытался объединить этот код с вышеуказанным контроллером, и я думаю, что я напортачиваюсь большое время – pepe

+0

В чем именно была проблема? Возможно, мы сможем это исправить. –

ответ

0

Вот как я слил код из SO ответа я уже говорил с моим кодом:

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

    NSDictionary *comment  = [commentsArray objectAtIndex:indexPath.row]; 
    NSString  *commentText = [comment objectForKey:@"comment_text"]; 
    NSString  *commentAuthor = [comment objectForKey:@"comment_author_name"]; 

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
    if (cell == nil) 
    { 
     cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]; 
     cell.textLabel.lineBreakMode = NSLineBreakByWordWrapping; 
     cell.textLabel.numberOfLines = 0; 
     cell.textLabel.font = [UIFont fontWithName:@"Helvetica" size:14.0]; 
    } 

    cell.textLabel.text  = commentText; 
    cell.detailTextLabel.text = [NSString stringWithFormat:@"by %@", commentAuthor]; 

    return cell; 
} 

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    NSDictionary *comment  = [commentsArray objectAtIndex:indexPath.row]; 
    NSString  *commentText = [comment objectForKey:@"comment_text"]; 

    UIFont *cellFont  = [UIFont fontWithName:@"Helvetica" size:14.0]; 
    CGSize constraintSize = CGSizeMake(280.0f, MAXFLOAT); 
    CGSize labelSize  = [commentText sizeWithFont:cellFont constrainedToSize:constraintSize lineBreakMode:NSLineBreakByWordWrapping]; 

    return labelSize.height + 40; 
} 

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