2011-11-24 18 views
6

ストーリーボードを適切に使用してモーダルモードにする方法が不思議でした。個人的には、xibsを使って作業することが好きですが、ストーリーボードが人気を得ているように見えて、将来行く方法になると思われます。xcode 4.2ストーリーボードでモーダルビューコントローラーを正しく使用する方法

私が通常View Controllerをモーダルにする方法は、次のようなものです:ViewControllerA(略してA)とViewControllerB(略してB)があります。 私は通常、Bを解散したいときに代理メソッドを指定してB.hにプロトコルを置き、assignプロパティとしてid<theProtocol> delegateフィールドを追加します。私はAで忙しいと私はBのモーダルを提示したいと仮定すると、私は書くでしょう:

B* b = [[B alloc] initWithNibName:@"B" bundle:nil]; 
b.delegate = self; 
[self presentModalViewController:B animated:YES]; 

のストーリーボードを使用して、私はそれからCTRL-ドラッグすることで、モーダルな方法で別のビューコントローラを設置することが可能です知っていますビューコントローラへのボタンとトランジションタイプとしてモーダルを選択する。私は思っています。新しいビューコントローラのデリゲートはどこで設定しますか?モーダルビューコントローラに物事を渡す正しい方法は何ですか?私は本当にSeguesと全体の契約があるかわからない...

答えて

5

それによるとthistutorial

を見てみましょう次のように、あなたがデリゲートを設定する必要があります。

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
    if ([segue.identifier isEqualToString:@"AddPlayer"]) 
    { 
     UINavigationController *navigationController = 
      segue.destinationViewController; 
     PlayerDetailsViewController 
      *playerDetailsViewController = 
      [[navigationController viewControllers] 
       objectAtIndex:0]; 
     playerDetailsViewController.delegate = self; 
    } 
} 

@ "AddPlayer"はあなたの 'モーダル'セグの名前です

+1

私はチュートリアルを見ましたが、明らかに私はあなたの返信を疑っても何のメリットもありませんが、これは以前よりもはるかに醜いコードであることに同意しないでしょうか?それはちょうど前に本当に簡単だった何かをするような面倒のように思える... – Warkst

+1

それはあなたのために醜いと思われる場合ストーリーボードを使用しないでください –

+1

それは私が今それらを使用しない主な理由です、私はちょうど "恐れている"彼らは将来それを行う主な方法になるでしょう。 – Warkst

0

prepareForSegueに渡されたUIStoryboardSegueオブジェクトを直接使用することができます。インスタンス化されているビューコントローラであるdestinationViewControllerというプロパティがあります。私はそれがすっきりしていることがわかります。 これは一例です。

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
    if ([segue.identifier isEqualToString:@"AddPlayer"]) 
    { 
     PlayerDetailsViewController 
      *playerDetailsViewController = 
      (PlayerDetailsViewController *) segue.destinationViewController; 

     playerDetailsViewController.delegate = self; 
    } 
} 

IMOあなたのアプリケーションの青写真のように機能するので、ストーリーボードは素晴らしいと思います。また、私はペン先が好きではなかった。 = D

+0

ああ待ってください。前の答えはこれを行いましたが、目的のビューコントローラーをナビゲーションビューコントローラーに割り当てましたが、これは必要ありません(私はそれが動作するかどうかわかりません...)。 –

関連する問題