#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