カスタム セルがあり、そのラベルの 1 つを大きくして、[もっと見る] ボタンを追加するのに十分な大きさにすることができます。そのため、ラベルのコンテンツを 5 行に切り取り、必要に応じてコンテンツを展開するこのボタンを追加しています。
私の質問は: tableView の reloadData を使用せずにこれを行うことはできますか?
「もっと見る」ボタン(カスタムセル内)のタッチイベントでこのコードを試しました:
self.contentView.frame = self.backgroundView.frame = self.accessoryView.frame = CGRectMake(0, 0, self.contentView.frame.size.width, self.contentView.frame.size.height + 80);
何も起こりません!セル行の高さ、つまりテーブル ビューのコンテンツの高さを拡張する方法が必要だと思います。
前もって感謝します、
エディション:リンクios でソリューションを確認しました - Twitter アプリのようにテーブル ビュー セルを展開します。このコードをカスタム セル (タッチ イベント) に適用しました。
self.contentExpanded = YES;
UITableView *tableView = [self parentTableView];
NSIndexPath *indexPath = [tableView indexPathForCell:self];
[tableView beginUpdates];
[tableView reloadRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];
[tableView endUpdates];
現在、2 つの問題があります。1) reloadRowsAtIndexPaths が reloadData 全体を実行しています。2)カスタムセルは、セルの高さを知っている人です。このメソッドにアクセスすると、self.contentExpanded は常に NO になります。
***parentTableView メソッドは、セルの親 tableView への参照から取得されました
エディション 2: 問題が heightForRow にあるとは思わない。このメソッドがすべてのセルに対して呼び出されることは避けられません...
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *) indexPath
{
CellObject *object;
if(self.searchTableData)
object = [self.searchTableData objectAtIndex:indexPath.row];
else
object = [self.database.cellObjectsFetchedResultsController objectAtIndexPath:indexPath];
id cell = [TableViewCellFactory createFromCellObject:object fromPrototypeTable:self.tableView];
CGFloat height = [cell getHeightRowForCellObject:object];
return height;
}
そしてカスタムセルで:
- (CGFloat)getHeightRowForCellObject:(CellObject *)cellObject
{
CGFloat messageHeight = 0;
if (![cellObject.content isEqualToString:@""])
{
UILabel *tempMessageLabel = [[UILabel alloc] init];
tempMessageLabel.font = [UIFont systemFontOfSize:14];
tempMessageLabel.autoresizingMask = (UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleBottomMargin );
tempMessageLabel.numberOfLines = 5;
tempMessageLabel.text = cellObject.content;
[tempMessageLabel sizeToFit];
CGFloat lineHeight = [tempMessageLabel.text sizeWithFont:tempMessageLabel.font].height;
CGSize size = [tempMessageLabel.text sizeWithFont:tempMessageLabel.font
constrainedToSize:CGSizeMake(280, lineHeight * tempMessageLabel.numberOfLines)
lineBreakMode:UILineBreakModeWordWrap];
messageHeight = size.height;
if(self.contentExpanded)
messageHeight += 100;
}
return messageHeight;
}