UITableViewCell переносит текст в приложение UINavigationController

#uitableview #uinavigationcontroller

#uitableview #uinavigationcontroller

Вопрос:

У меня есть tableview с разной высотой для каждой ячейки в зависимости от размера текста. Я вычисляю размер строки в методе делегирования -tableView:heightForRowAtIndexPath и присваиваю тексту в методе источника данных -tableView:cellForRowAtIndexPath . Я могу определить соответствующую высоту на основе текста, но не могу заставить текст обтекаться; вместо этого он просто исчезает с экрана. Я использую приложение на основе навигации для генерации tableview в дочернем контроллере просмотра с помощью кончика. Я поиграл с некоторыми опциями для tableview, но я не могу выполнить перенос текста. Я хотел бы видеть следующий перенос, как если бы это был textview, но я хочу, чтобы все содержимое отображалось в ячейке, без полос прокрутки в самой ячейке таблицы. Возможно ли это?

Вот обновленный код, высота настраивается правильно, но ячейка не переносится по словам…

 (CGFloat)tableView:(UITableView *)tableView
heightForRowAtIndexPath:(NSIndexPath *)indexPath {

    NSString *string = [self.quizDictionary objectForKey:[_temp objectAtIndex:testKV]];

    CGSize stringSize = [string sizeWithFont:[UIFont boldSystemFontOfSize:15]
                          constrainedToSize:CGSizeMake(320, 9999) 
                              lineBreakMode:UILineBreakModeWordWrap];
    return stringSize.height 25;
} 


- (UITableViewCell *)tableView:(UITableView *)tableView 
         cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
    int row = indexPath.row;
    if (row > 6) {
        return nil;
    }
    static NSString *CellIdentifier = @"Cell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[[UITableViewCell alloc] 
                 initWithStyle:UITableViewCellStyleDefault 
                 reuseIdentifier:CellIdentifier] 
                autorelease];
        } 
    // configure the cell...
    NSString *string = [self getQuestionPart];

    CGSize stringSize = [string sizeWithFont:[UIFont boldSystemFontOfSize:15] constrainedToSize:CGSizeMake(320, 9999) lineBreakMode:UILineBreakModeWordWrap];
    UITextView *textV=[[UILabel alloc] initWithFrame:CGRectMake(5, 5, 290, stringSize.height 10)];
    textV.font = [UIFont systemFontOfSize:15.0];
    textV.text=string;
    textV.textColor=[UIColor blackColor];
 // textV.editable=NO;
    [cell.contentView addSubview:textV];
    [textV release];
    testKV  ; 
    return cell;
}
  

Ответ №1:

Вы хотите:

 cell.textLabel.lineBreakMode = UILineBreakModeWordWrap;
  

чтобы ваш текст переносился в ячейку. Это в сочетании с тщательной реализацией tableView:heightForRowAtIndexPath: должно сработать.

Ответ №2:

Да, это возможно!!!

Глядя на это, вам нужно быть несколько хитрым. Вам нужно динамически вычислить высоту TextView и на основе высоты TextView вернуть высоту ячейки..

Это код, с помощью которого вы можете вычислить размер строки….

Сначала получаем размер строки и устанавливаем высоту ячейки на основе строки

 - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath  {  

    NSDictionary *d=(NSDictionary *)[self.menuArray objectAtIndex:indexPath.section];
    NSString *label =  [d valueForKey:@"Description"];
    CGSize stringSize = [label sizeWithFont:[UIFont boldSystemFontOfSize:15]
                          constrainedToSize:CGSizeMake(320, 9999) 
                              lineBreakMode:UILineBreakModeWordWrap];

    return stringSize.height 25;

} 

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

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    //if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
    //}

    NSDictionary *d=(NSDictionary *)[self.menuArray objectAtIndex:indexPath.section];

    NSString *string = [d valueForKey:@"Description"];
    CGSize stringSize = [string sizeWithFont:[UIFont boldSystemFontOfSize:15] constrainedToSize:CGSizeMake(320, 9999) lineBreakMode:UILineBreakModeWordWrap];

    UITextView *textV=[[UILabel alloc] initWithFrame:CGRectMake(5, 5, 290, stringSize.height 10)];
    textV.font = [UIFont systemFontOfSize:15.0];
    textV.text=string;
    textV.textColor=[UIColor blackColor];
    textV.editable=NO;
    [cell.contentView addSubview:twitLbl];
    [twitLbl release];

    return cell;
}
  

Комментарии:

1. Аджай, я добавил приведенный выше код, но он не переносится. Я отредактировал свой первоначальный вопрос, чтобы добавить cellForRowAtIndexPath и -heightForRowAtIndexPath (мне пришлось изменить twitlbl на textV, правильно?) и закомментировать textV.редактируемый = НЕТ

2. потому что я получил исключение NSInvalidArgumentException’, причина: ‘-[UILabel setEditable:]: нераспознанный селектор, отправленный экземпляру 0x4b7cd90