1

これが私が持っているものです:

画像の配列を持つルート ビュー コントローラーがあります。フルスクリーン画像を表示するためのフルスクリーン UIImageView を持つ detailViewController があります。また、detailViewController を表すセグエも定義しています。このセグエは、ユーザーが rootViewController で次のように画像を選択すると、プログラムによって呼び出されます。

- (void)carousel:(iCarousel *)carousel didSelectItemAtIndex:(NSInteger)index
{
    [self performSegueWithIdentifier:@"fullScreenSegue" sender:self];
}

問題は、detailViewController には、表示する UIImageView の画像として設定する画像プロパティがあり、表示する画像を渡す方法が必要なことです。どうすればいいですか?Apple ドキュメントによると、呼び出し元のコントローラーに prepareForSegue メソッドを実装する必要がありますが、その時点で、上記のインデックスにアクセスできなくなります。画像はルート ビュー コントローラーの配列にあり、detailViewController に渡す画像を知るためにそのインデックスが必要です。また、呼び出し元のコントローラーをデリゲートとして設定し、次に init() メソッドで「setImage」メソッドを呼び出すプロトコルを持つように detailViewController を設定しましたが、それは機能していないようで、とにかくクレイジーな実装のようです.. .

@property int selectedIndex のように rootViewController でプロパティを宣言し、そのプロパティを上記のメソッドで設定し、次に prepareForSegue メソッドで次のようなことを行うことを考えました。

detailViewController.imageForDisplay = [images objectAtIndex:selectedIndex];

それはおそらくうまくいくでしょうが、そのアプローチは私を誤解させます...

助けてくれてありがとう!

4

1 に答える 1

1

対処方法は2つ。セグエを呼び出す前に、prepareForSegueを使用してインデックスをどこかに保存してください...

self.selectedIndex = index;
[self performSegueWithIdentifier:@"fullScreenSegue" sender:self];

次にprepareForSegue使用中:

if([[segue identifier] isEqualToString:@"fullScreenSegue"])
{
    DetailViewController *detailViewController = segue.destinationViewController;
    detailViewController.imageForDisplay = [self.images objectAtIndex:self.selectedIndex];
}

2 番目の方法は、デリゲートとプロトコルを使用することですが、メソッドではなくメソッドでsetImage呼び出しを行います。viewDidLoadinit

それが役立つことを願っています。かなり近づいたようです。

于 2012-04-18T16:50:11.617 に答える