web-dev-qa-db-ja.com

Xcode 4.5ストーリーボード「終了」

IOS6をサポートするXcode 4.5をインストールしたばかりです。ストーリーボードに「終了」という新しいアイコンがあり、View Controllerの下に「First Responder」などとともに表示されます。「Exit」というラベルの小さな緑色のアイコンがあります。

私はその上で何かを見つけることも、それがどのように使用されるかも解きません。

誰でもそれについて、それがどのように機能するのか、何のために知っていますか?

102
Josh Kahane

これは「Unwind Segue」と呼ばれます。残念ながら、XCode 4.5の新機能のリストに記載されている短い記述を除いて、これに関するドキュメントはこれまでのところありません。

セグエの巻き戻しにより、ストーリーボードの既存のシーンのインスタンスに移行できます

良いニュースは、WWDC 2012から、これらのクリーチャーを説明するセッションがあることです(特に)。

開発者アカウントの詳細を使用してAppleのiOS Dev Centerにログインし、 WWDC 2012ビデオページ に移動して、「アプリでストーリーボードを採用する」(上から5番目)を見ることができます。セグエは時間37:20に始まります。


更新:ここに、Appleのドキュメントの主題に関する詳細情報があります

シーケンスを巻き戻すためのExitという名前のプレースホルダーオブジェクト。デフォルトでは、ユーザーが子シーンを閉じると、そのシーンのView Controllerは親シーン、つまり元々子シーンに遷移したシーンに巻き戻されます(または戻ります)。ただし、Exitオブジェクトを使用すると、View Controllerで任意のシーンに巻き戻すことができます。

(iOS6 docsetから> General> Getting Started)

そして、これを実装する方法の良い例です


別の更新:

これはAppleのテクニカルノートです このトピックに関するものです。

72
Alladinian

ストーリーボードに一連のビューがあると想像してください。

A -> ... -> Z

ビューにボタンZを配置すると、ユーザーはAに戻ることができます。

したがって、必要なのは、最後まで戻すビュー、この場合はAとしてマークされ、IBActionとしてマークされ、タイプUIStoryboardSegue *の単一パラメーター。メソッドと変数の名前は関係ありません。実装内で何をするかは重要ではありません。以下に例を示します。

Obj-C:
Aのインターフェイス(Zのインターフェイスではありません):

- (IBAction)cancelSignup:(UIStoryboardSegue *)unwindSegue;

Aの実装(Zではなく):

- (IBAction)cancelSignup:(UIStoryboardSegue *)unwindSegue {
    // Only "implemented" to satisfy a respondsToSelector: search.
    // You can actually implement more stuff here, if you want, IE, if
    // you need to reach out to a server to mention that this screen was
    // returned to from a later screen.
}

スイフト:
Aのソース(Zのソースではありません):

@IBAction func cancelSignup(unwindSegue: UIStoryboardSegue) {
    // Only "implemented" to satisfy a respondsToSelector: search.
    // You can actually implement more stuff here, if you want, IE, if
    // you need to reach out to a server to mention that this screen was
    // returned to from a later screen.
}

ストーリーボード内で、 control Z(IE、キャンセルボタン)上の要素からZExitにドラッグします。アクションとして単一のUIStoryboardSegue *のみを受け入れるIBActionを持つビュー階層の上位にあるすべてのビューをスキャンし、リストから選択します。

うまくいけば、これが既存の答えよりも簡単で便利なものになったと思います。私はこのリンクが特に有用であることがわかったので、私の答えを読んだ後でもまだ曖昧な詳細がある場合は、おそらくこれがあなたを助けることができます(私はこの長い記事のすべての有用な情報を短い答えに凝縮しようとしました): http://www.freelancemadscience.com/fmslabs_blog/2012/9/24/advanced-storyboard-techniques.html

10
ArtOfWarfare

ストーリーボードのアンワインドセグエを接続できません も参照してください。これにより、終了アイコンを有効にするための要件が​​明確になります。 View Controller階層の上位にあるメソッドが必要です:

  1. IBActionとしてマークされています

  2. UIStoryboardSegue *であるパラメーターを1つ受け取ります

これらの条件が両方とも満たされると、終了アイコンが表示され、同じView Controllerのボタンからコントロールをドラッグして接続することができます。

また、世界で最も単純な例をここに投稿しました。

https://github.com/mattneub/Programming-iOS-Book-Examples/tree/master/ch19p638presentedViewControllerStoryboard (2013年7月12日修正)

これは、前に行う必要があったすべての作業とは対照的に、提示されたView Controllerにから戻ってを分離することがいかに簡単かを示しています情報をやり取りします(テンプレート内のデリゲートとプロトコルを持つもの。すべて削除できるようになりました)。

4
matt

要件定義にわずかな微妙さを追加するだけで役立ちます。これは、Xcode 4.6での実験に基づいています。 Xcodeから目的のコントロールドラッグ応答を可能にするのは、メソッドの宣言(!)だけであることがわかりました。完全な要件であることがわかりました。

  • IBActionとしてマークされています
  • UIStoryboardSegue *であるパラメーターを1つ受け取ります
  • アクションを宣言する必要があります(ただし、必ずしも実装する必要はありません[_.M_実装セクションのメソッドを意味する])。
  • Appdelegateクラスを除き、_.M_のインターフェイスセクションでも、任意のクラスのインターフェイス宣言に含めることができます。 (コントローラー階層内の位置に依存関係はありませんでした。古いファイルを追加すると、システムはUIStoryboardSegueパラメーターを持つすべてのメソッドを集約し、終了アイコンのメニューに表示するようです。)メソッドがストーリーボードエディターで操作しているシーンのクラスにある場合は、コントロールドラッグメニューにもメソッドが表示されますが、コロンなしで表示され、実行時にアクションをトリガーしないようです。

例:-(IBAction)anymethodname:(UIStoryboardSegue *)myvariable;

3
Jack Bellis