3

UITableViewCellをオーバーライドして static を非表示にする方法の多くの例を見てきましたが、heightForRowAtIndexPath今は機能していますが、何か間違っているかどうかを確認したいほど面倒です。

UITableViewController約8行のテーブルビューがあります。私のアプリのこの画面には 1 つのオブジェクトが表示されます。たとえば、1 行は説明、1 行は画像、1 行はマップ ビューなどです。すべての行は静的です。

場合によっては、表示されているオブジェクトの一部にマップがないため、mapview. これは静的な行なので、その行のアウトレット プロパティ (例: @property (weak, nonatomic) IBOutlet UITableViewCell *mapViewRow;) を使用することで、その行の高さを 0 に設定したり、または でその行を非表示にしたりできると考えていましviewDidLoadviewWillAppear。ただし、これを行う唯一の方法はheightForRowAtIndexPathメソッドをオーバーライドすることのようです。これは、コードでマップ行のインデックスをハードコーディングする必要があるため、面倒です。

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
    if (indexPath.row == 6 && self.displayItem.shouldHideMap) {
        return 0;
    }
    return [super tableView:tableView heightForRowAtIndexPath:indexPath];
}

もちろん、大したことではありませんが、静的な行のサイズを変更する方法全体がtableview、そもそもストーリーボードにそれらを設定するという点を無効にしているように思えます。

4

2 に答える 2

2

編集- 私の答えの根拠

行の高さを変更するには、テーブル全体またはその行を含むサブセットを再読み込みする必要があります。B/c テーブルに高さゼロの行があるのは少し奇妙です。行がテーブルに存在しないようにデータ ソースを変更することをお勧めします。

それにはいくつかの方法があります。配列の各行が適切なデータを含むテーブルの行に対応する、displayItem から配列を作成できます。この配列を再構築してから を呼び出します[tableView reloadData]。私の最初の回答では、各データ要素を 0 行または 1 行のセクションとして扱うことで、不要な行も削除します。

元の答え

あなたのテーブルビューはプレーンまたはグループ化されたスタイルですか? シンプルなスタイルの場合、各行を 0 行または 1 行のセクションとして扱うことができます。tableView の dataSource メソッドとデリゲート メソッドでは、セクション インデックスを使用して、そのセクションで関心のあるデータを識別しますself.displayItem

コードは次のようになります。

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    return 8; // max number of possible rows in table
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    NSInteger rows = 1;

    // set self.mapSectionIndex during initialization or hard code it
    if (section == self.mapSectionIndex && self.displayItem.shouldHideMap) {
        rows = 0;
    }
    return rows;
}

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:indexPath
{
    return 60.0f; // whatever you want the height to be
}

// also modify tableView:cellForRowAtIndexPath: and any other tableView delegate and dataSource methods appropriately
于 2013-04-10T01:49:32.243 に答える