1

マスター詳細アプリケーション テンプレートを使用してプロジェクトを作成しました。このプロジェクトは、iPhone と iPad の両方を対象としています。

My Master View には、DB データから取り込まれたテーブル ビュー コントローラーが含まれています。これまでのところ問題はありません。

詳細ビューでは、デフォルトのビュー コントローラーをコレクション ビュー コントローラーに置き換えました。マスター テーブル ビューのすべての行で、コレクション ビューに多数のセルを作成したいと考えています。

ストーリーボードでは、iphone バージョンにはテーブルとコレクション (マスター/詳細) コントローラーの間にセグエがあり、すべて正常に動作します。

MasterViewController.m    
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    if ([[segue identifier] isEqualToString:@"showDetail"]) {
        NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow];
        Inbound *current = inbounds[indexPath.row];
        [[segue destinationViewController] setDetailItem:current];
    }
}

カスタム オブジェクト「インバウンド」がマスター ビューから詳細ビューに渡されます。これが発生すると、詳細/コレクション ビュー コントローラーがセルを更新します。

DetailViewController.m
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
{
   //Go round the DB and update the cells
}

私の問題は、iPad バージョンの分割ビューにあります。ストーリーボードでは、マスター ビューと詳細ビューの間にセグエではなく関係があります。テーブルの行を選択したときに実行される唯一のコードは次のとおりです。

MasterViewController.m
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad) {
        Inbound *current = inbounds[indexPath.row];
        self.detailCollectionViewController.detailItem = current;

        NSLog(@"%@",@"table cell clicked");
    }
}

カスタムの「インバウンド」オブジェクトが詳細ビュー コントローラーに適切に渡されていることがわかります。しかし、何らかの理由で、コレクション ビューが更新されません。

何か案は?

4

1 に答える 1

1

iPhone バージョンでは、新しいビューが画面にプッシュされるため、メソッドの 1 つは、detailItem に基づいてビューを初期化します。

iPad では、詳細ビューがすでに画面に表示されています。詳細ビューのセッター関数がコレクション ビューのデータをリロードすることを確認する必要があります。現時点ではそれを行っていないと思います...

つまり、このようなものが必要です(ARCを想定)

- (void)setDetailItem:(Inbound *)detailItem
{
    _detailItem = detailItem;
    [_collectionView reloadData];
}

ティム

于 2012-10-26T06:33:57.697 に答える