2016-05-16 2 views
1

私はiOSプログラミング(Swiftで学ぶ)を初めて使い、最近Master Detail Applicationsに興味を持っています。私が学んでいる本の現在の章もそうです。MasterViewのDetailViewのトリガーポップオーバー

本のテンプレートは、まだ初期のViewControllerとしてだけでナビゲーションコントローラを使用しながら、マスター・ディテール・アプリ用のXcodeのテンプレートがスプリットビューコントローラにもたらしますので、私は、私の本は少し古すぎるように思われることに気づい:

Template from Xcode (Xcodeのテンプレートから) Template from the book (テンプレートブックから)

私は何をしたいことは、その後のフルスクリーンポップアップをトリガーマスター・ビュー・コントローラのツールバーにある「+」ボタンの場所ですDetail View Controller内の別のViewController。そこに、本書の例では

Example from contacts app (連絡先アプリからの例)

:あなたがiPadやiPhoneプラスの風景の中にそれを実行する場合は、まさにこの問題が発生した基準と連絡先アプリを参照してください。ちょうどツールバーに "+"が追加され、新しいView ControllerにSegueが追加されましたが、Xcodeの新しいテンプレートではそれほど簡単ではありません。どのように詳細ビューでこのようなポップオーバーを行うことができますが、マスタービューのボタンで開始できますか?デフォルトMDテンプレートを皮切り

おかげ

答えて

1

  • MasterViewControllerviewDidLoadからaddButtonコードを削除します。

  • ストーリーボードでマスターの追加ボタンを作成し、MasterViewControllerアクションにリンクします。

  • ディテールコントローラからオーバレイとして使用したいセグを作成し、名前を付けます。

  • 詳細コントローラで、そのセグを実行するメソッドを作成します。

例えば:マスターアクションで

func displayOverlay() { 
    print("perform a segue here to the required controller") 
    self.performSegueWithIdentifier("overlay", sender: self) 
} 
  • 、セグエをトリガするために詳細なメソッドを呼び出します。

例えば:

@IBAction func detailAdd(sender: AnyObject) { 
    if let dvc : DetailViewController = detailViewController { 
     dvc.displayOverlay() 
    } else { 
     print("Oops...no detail controller") 
    } 
} 

あなたは、あなたが見せているアニメーションのスタイルをしたい場合は余分な作業を行う必要がありますが、これはあなたの基本的なコントローラ接続を取得する必要があります。

+0

ありがとうございました!マスタビューコントローラからどのようにしてメソッドを呼び出すことができますか? Detail View Controllerを参照しなければならないことは知っていますが、実際にはどうしたらよいのでしょうか – Zocker3333

+1

マスターコントローラに参照があります( 'detailViewController'と呼ばれます)。アクションメソッドの外観については、更新された回答を参照してください。 –

+0

私はよりよい方法を見つけたと思います:代わりに、UISplitViewから新しいViewへのSegueを作成し、 'self.splitViewController?.performSegueWithIdentifier(id、sender:sender)'を使ってマスタービュー内でトリガーすると、Viewは取得します既定の 'showDetail' segueと同じように、あなたがポートレートモードであるのか風景モードであるのかに応じて、必要に応じて表示されます。あなたのアプローチはランドスケープモードでしか動作しませんが、とにかく感謝して、あなたは私を正しい方向に導いてくれました! – Zocker3333

関連する問題