Изменение размера ячейки UITableView по размеру содержимого UITextView - PullRequest
2 голосов
/ 04 июля 2011

Мне нужна помощь. У меня есть UITableView с пользовательским UITableViewCell. В ячейке у меня есть один UITextView. Мне нужно сделать, когда пользователь введет некоторые данные в UITextView. UITextView изменит размер содержимого UITextView. Я понимаю это в - (void) textViewDidChange: (UITextView *) textView Но теперь мне нужно изменить размер ячейки также, если размер содержимого UITextView будет больше, чем текущая ячейка.

Вопрос в том, как изменить размер ячейки UITableView на размер содержимого UITextView.

Мой код ниже.

@class TableCell;
@interface RootViewController : UITableViewController{
UITableView*tableViewTest;
TableCell *tableCell;
}
@property (nonatomic,retain)IBOutlet TableCell *tableCell;
@property (nonatomic,retain)IBOutlet UITableView*tableViewTest;
@end



- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
return 5;
}

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

    static NSString *CellIdentifier = @"Cell";

    TableCell *cell = (TableCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
          [[NSBundle mainBundle] loadNibNamed:@"TableCell" owner:self options:nil];
    cell=tableCell;
    self.tableCell=nil;
}
[cell setTag:indexPath.row+1];

return cell;
 }

- (void)textViewDidChange:(UITextView *)textView
{
CGRect frame = textView.frame;
frame.size.height = textView.contentSize.height;
textView.frame = frame;
NSLog(@"Change=%f",textView.contentSize.height);    
}




@interface TableCell : UITableViewCell <UITextViewDelegate>{
UITextView *textViewTest;
}
@property (nonatomic,retain) IBOutlet UITextView *textViewTest;

Спасибо за помощь

Ответы [ 5 ]

3 голосов
/ 03 июля 2012

Не вызывайте reloadData, вместо этого используйте [table beginUpdates] stuff

2 голосов
/ 30 мая 2013

в UITableViewDelegate вы можете изменить высоту вашей ячейки с помощью функции

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
// do your stuff here like resize your cell height 
}

и после этого для отражения изменений в представлении необходимо перезагрузить таблицу на

[self.table reloadData];

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

NSIndexPath *ip = [self.table indexPathForCell:cell];
[self.table reloadSections:[NSIndexSet indexSetWithIndex:ip.section] withRowAnimation:UITableViewRowAnimationAutomatic];
1 голос
/ 07 февраля 2016

Старый вопрос, но некоторая магия автоматического макета может помочь кому-то, если все еще ищет ответ на этот вопрос.

Если все настроено правильно (ограничения Auto Layout), вам не нужно ничего вычислять самостоятельно.

Все, что вам нужно сделать - это отключить свойство прокрутки UITextView, затем при вызове textViewDidChange вызвать tableView.beginUpdates () и tableView.endUpdates ().

Для подробного объяснения, посмотрите сообщение , которое я написал, которое также включает рабочий пример проекта.

0 голосов
/ 04 июля 2011

Протокол UITableViewDelegate определяет:

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

Позволяет указать высоту каждой ячейки. UITextView будет вызывать источник данных для каждой видимой ячейки. Вы можете вызвать это, позвонив UITableView s reloadData

0 голосов
/ 04 июля 2011

Вы можете только увеличить высоту пользовательского UITableViewCell, реализовав его delegate heightForRowAtIndexPath:

Когда textView ячейки становится больше, чем высота ячейки, вам нужно вызвать reloadData метод для экземпляра UITableView, и функция heightForRowAtIndexPath: должна вернуть правильную высоту для расширенной ячейки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...