1

写真を含むコレクション ビューを含む何かを行っています。セルの 1 つを選択すると、大きな画像が表示される新しいビューに移行します。

セグエの準備はこちら

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{
    if ([segue.identifier isEqualToString:@"showPhotoSegue"]) {
        NSIndexPath *ip = [self.photoCollectionView indexPathForCell:sender];
        PhotoDisplayViewController *viewController = segue.destinationViewController;
        Photo* photo = [self.fetchedResultsController objectAtIndexPath:ip];
        NSLog(@"setting PHOTO at indexPath %@", ip);
        [viewController setPhoto:[UIImage imageWithContentsOfFile:photo.url]];
    }

}

そして、ここは didSelectItemAtIndexPath

-(void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath{
    NSString *identifier = @"showPhotoSegue";
    [self performSegueWithIdentifier:identifier sender:self];
    NSLog(@"Selected item at %@", indexPath);
}

私のビューは常に空なので、印刷行ステートメントを追加しました。出力は常に次のようになります

Selected cell at <NSIndexPath 0x1e084940> 2 indexes [0, 0], detail view controller 

私の質問は、NSIndexPath が常に 2 つのインデックスのペアである理由と、それを私の prepareforsegue で使用してセグエのビューを設定する方法です。

ありがとう

4

3 に答える 3

1

ではprepareForSegue:sender:、 であることが期待senderされますUICollectionViewCell

では、 (your ) を引数としてcollectionView:didSelectItemAtIndexPath:渡しています。あなたのコレクション ビュー デリゲートはコレクション ビュー セルではないと思われます。selfUICollectionViewDelegatesender

senderコレクション ビュー デリゲートを として送信し、セルを として受信することを期待する代わりにsender、インデックス パスを として渡し、senderそれを として受信することを期待してみsenderませんか?

static NSString const *kShowPhotoSegueIdentifier = @"showPhotoSegue";

- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath {
    [self performSegueWithIdentifier:kShowPhotoSegueIdentifier sender:indexPath];
}

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    if ([segue.identifier isEqualToString:kShowPhotoSegueIdentifier]) {
        [self prepareForShowPhotoSegue:segue withIndexPath:sender];
    }
}

- (void)prepareForShowPhotoSegue:(UIStoryboardSegue *)segue withIndexPath:(NSIndexPath *)indexPath {
    PhotoDisplayViewController *viewController = segue.destinationViewController;
    Photo* photo = [self.fetchedResultsController objectAtIndexPath:indexPath];
    [viewController setPhoto:[UIImage imageWithContentsOfFile:photo.url]];
}
于 2012-12-15T07:52:50.770 に答える
0

NSIndexPath は主に UITableView に使用され、セクションとその行が考慮されます。

そのため、NSIndexPath を使用したい場所ならどこでも、その行とセクションにアクセスできます。

したがって、indexpath.section が役に立たない場合は、インデックス変数に indexpath.row を使用するようお願いします。

于 2012-12-15T12:52:38.697 に答える
0

NSIndexPathディレクトリ ツリーを表すために使用されるファイル構造です。テーブル (indexPathForCell:) のコンテキストでは、セクションと行のインデックスが含まれています。

インデックス パス内の各インデックスは、ツリー内のあるノードから別のより深いノードへの子の配列へのインデックスを表します。たとえば、インデックス パス 1.4.3.2 は、図 1 に示すパスを指定します。

ドキュメントの詳細情報

于 2012-12-15T07:52:19.950 に答える