2012-04-03 15 views
3

ボタンが最初のビューにタッチしたとき、私のようなUIImageViewに簡単な画像を設定しようとしています:iOS 5では、ストーリーボードUIViewControllerのセグのプロパティを設定するにはどうすればよいですか?

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
    ImageViewController *imageViewController = [segue destinationViewController]; 
    imageViewController.title = @"test"; 
    imageViewController.imvBig.image = [UIImage imageNamed:@"test.png"]; 
    imageViewController.lblTest.text = @"test2"; 
} 

.TITLEを設定し、うまく表示されますが、何らかの理由で、私はできません取得しますimvBig.imageを表示させ、ラベルテキストを表示させることもできません。はい、私はコンセントなどで作成されたプロパティを持っています(私はちょうどそれをIBからコードにドラッグして、それを自動作成しました)。

ストーリーボードの設定でプロパティを1つの通常のビューから次のビューに正しく設定する方法を教えてもらえますか?

答えて

2

おそらくImageViewControllerシステムがprepareForSegue:sender:を送信まだストーリーボードからそのビューをロードしていないので、それらの出口(imvBiglblTest)はゼロです。 nilに送られたメッセージは暗黙のうちに無視されます。

通常、ソースビューコントローラがデスティネーションビューコントローラのビューで動き回るのは適切ではありません。デスティネーションビューコントローラは、これらのビューの設定を通常、viewDidLoadviewWillAppear:、またはviewDidAppear:のいずれかに設定する必要があります。私は、これはNSStringのプロパティを作成し、ImageViewControllerののviewDidLoad上の文字列にラベルを設定することで、仕事を得ることができたよう

+1

私が必要ナビゲーションスタック上の前のビューからURLを設定します。 ImageViewControllerにデータを正しく渡す方法を知る必要があります。 –

+2

通常、destinationForSegueで渡すデータの宛先ビューコントローラのプロパティを宣言します。次に、そのビューコントローラのviewDidLoad(または必要に応じて後で)で、ビューを更新してデータを反映させます。 – rickster

2

はルックス:

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view. 

    self.lbltest.text = _myString; 
} 

私は私が直接プロパティを設定することはできません推測しますビューがロードされるまで

+0

これは、 "できない"と "してはいけない"の両方です。コールコントローラーが新しいコントローラーでサブビューを直接操作することは望ましくありません。後で表示する方法を変更する可能性があるからです。データを渡し、viewDidLoad()で表示する正しい方法を整理するほうがはるかに優れています。 –

0

segue destinationViewControllerプロパティを使用するだけで、viewControllerを設定する必要はありません。

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
if ([[segue identifier] isEqualToString:@"Show ImageViewController"]) { 

[segue.destinationViewController setTitle:@Test"]; 
[segue.destinationViewController setFoo:@"Bar"]; 
//More stuff to set 
} 

}

の画像ビューにそれを設定し、また、その後、プロパティとしてImageViewControllerの画像を作成し、それを合成する:私は複数seguesを使用できるので、私はいつも最初のストーリーボードに識別子を設定しますviewDidAppear:

self. imvBig.image = myNewImge;//this in the viewDidLoad 

そしてセグエにそのイメージを設定します。

[segue.destinationViewController setMyImage:[UIImage [email protected]"test.png"]]; 
関連する問題