web-dev-qa-db-ja.com

UITableViewまたは個々のセルを再ロードせずに単一行の高さを増やす方法[Swift]?

行の高さを展開して、中身を表示したいと思います。 UITableviewを再読み込みせずに、下の画像に示すように展開する必要があるセルをタップすると、コンテンツが表示されます。

IMAGE

今までに試したこと。

1)内部のビューを拡大しようとしましたが、うまくいきませんでした

2)rowAtIndexを追加してみましたが、複雑になりました

3)行の高さの変更を変更してインデックスでスクロールしようとしましたが、うまくいきましたが、そのようにしたくありません。 (テーブルビューをリロードしなければならない悪いこと)

しかし、私は多くの答えを得ましたが、特定のインデックスで更新すると配列(データソース)のデータが継続的に更新されるため、問題に対処できませんでした。インデックスの配列のデータが異なる場合があり、誤った出力が表示される場合があります。

説明

データが変更されてテーブルビューを再読み込みした後、バックグラウンドで更新し続ける構造体の配列があることを意味しますが、インデックスで行を再読み込みし、配列内のデータが既に変更されている場合、重複が正しく表示される可能性がありますか?だからリロードをせずに行の高さを変更したいだけです。

リロードの問題は

データを展開している間、配列内でデータが変わる可能性があります。したがって、すでにビューを作成しており、セルの高さを45から76に変更する必要があり、最後のセル76から45およびこのセル45から76に別のセルをもう一度タップすると、すべての情報がプリロードされます。

11
O-mkar

テーブルの高さはデリゲートを介してのみ変更できます。他に方法はありません。簡単な方法を紹介します。

変数を宣言する

var selectedIndex = NSIndexPath()

内部didSelectRowAtIndexPath選択したセルを再読み込み

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {

        selectedIndex = indexPath
        tableView.reloadRowsAtIndexPaths([indexPath], withRowAnimation: UITableViewRowAnimation.Fade)

    }

内部heightForRowAtIndexPath戻りサイズ

func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
    if indexPath == selectedIndex {

        return 100 //Size you want to increase to
    }
    return 50 // Default Size
}
5
Olivia Wilde

セルをリロードする必要さえありません。ターゲットの場所で現在のセルを取得して直接変更し、テーブルビューでbeginUpdatesendUpdatesを呼び出してすべてのセルを再計算します。行の高さ。

20
Wain

UITableViewの高さを調整し、以下のコードを使用してリロードを管理することもできます

self.tableView.beginUpdates()

self.tableView.endUpdates()

enter image description here

15
Sheereen S

2つのカスタムセルを試すことができます。変数でユーザーの選択を追跡し、以下のコードで単一のセルを再読み込みします。ユーザーがcellForRowAtIndexPathのセル読み込み詳細セルをクリックしたとき。 tableView配列には、セルが消費されたときに表示される情報が含まれている必要があります。

self.tableView?.beginUpdates()
var indexPath = NSIndexPath(forRow: rowNumber, inSection: 0)
self.tableView.reloadRowsAtIndexPaths([indexPath], withRowAnimation: UITableViewRowAnimation.Top)
self.tableView?.endUpdates()
6
iVarun

TVCを拡張するロジックが機能しているとすると、テーブルビューメソッドbeginUpdatesおよびendUpdatesを呼び出すだけです。これらのメソッドは、TVCへの更新をラップする必要があります。

4
Andrea

テーブル全体をリロードする必要はありません。 UITableViewにはメソッドfunc reloadRowsAtIndexPaths(indexPaths: [NSIndexPath], withRowAnimation animation: UITableViewRowAnimation)があります。これを使用して、単一のセルを更新できます。

2
Jelly