Xcode 6.1でビルドしたiPhoneアプリケーション(Swiftで構築)に2つのビューコントローラーがあり、ストーリーボードを使用しています。
最初のビューコントローラーはストーリーボードのナビゲーションコントローラーに埋め込まれ、2番目のビューコントローラーのセグエは「表示」セグエです。
アプリケーションを実行すると、遷移はiOS 8.xではプッシュとして適切に表示されますが、iOS 7.xではナビゲーションバーのないモーダルとして表示されます。
私のアプリケーションの要件は、iOS 7かiOS 8かに関係なく、移行をプッシュとして表示することです。これをiOSの両方のバージョンでプッシュとして機能させるためのアイデアはありますか?
この問題が言及されている関連記事を見ましたが、問題の解決策を見つけることができませんでした: ストーリーボードXcode 6の適応セグエ6.プッシュは非推奨ですか?
どんな助けでもありがたいです...
ありがとう
このソリューションは、次の点で他のソリューションとは異なります。
私は 非常に詳細なSO回答 を与えただけで、何が起こっているのか、そして理由が完全に説明されていますが、簡単な解決策は、プッシュしていないセグエを削除してから再作成することですその理由は、セグエに壊れたxmlのビットがある可能性が高いためです(この問題を確認する方法/手順については、拡張回答を参照してください)。
ビュー階層内に少なくとも1つのUINavigationControllerがあることを確認したら、セグエが手動のセグエではなく、それに関連付けられたアクションがないことを確認します(ストーリーボードでセグエをソースコードとして表示します)。既存のセグエを削除してから、Ctrlキーを押しながらUIView/UIControlからターゲットビューコントローラーにドラッグします。カスタムアクションが必要な場合は、宛先コントローラーの呼び出しをprepareForSegueでインターセプトします。
また、このソリューションが機能することを確認するには、次の手順を実行してください。
UINavigationControllerではなく、UIViewControllerにInitial View Controllerを割り当てた可能性があります。また、UIViewControllerを選択し、[Is Initial View Controller]オプションがオフになっていることを確認します。
ここ はその回避策です。 Xcode for iOS 7のバグのようです。ダミーのUINavigationControllerを作成し、すべての無料のUIViewControllerをこのナビゲーションコントローラーにリンクする必要があります。私のために働いた。
これはXcode 7.2のバグだと思います。回避策として、「プッシュ(非推奨)」セグエを作成し、ストーリーボードエディターでセグエを選択して、表示に変更します(例:プッシュ)。
私にとって、ストーリーボードにはナビゲーションコントローラがありませんでした。ナビゲーションコントローラーをプログラムで作成しています。これはiOS8では正常に機能しますが、iOS7では機能しません。
[〜#〜]ソリューション[〜#〜]
私は年齢の「表示(例:プッシュ)」でこの問題を抱えていましたが、ポップオーバー内のナビゲーションコントローラーにビューコントローラーをプッシュしようとしたときにそれを理解しました。呼び出されたView Controllerのコンテキストに問題があるようです。だからこれは私がそれを解決した方法です:
私はこの問題に遭遇し、私のために機能することがわかった唯一の解決策は、非推奨の「プッシュ」セグエを使用することです。
XCode 9でSwift 4.を使用しています。このバージョンは昨日(9月20日)にリリースされました。
私にとって、これは単なるキャッシュのバグでした。 「Present Modally」を選択してアプリを実行し、「Show(e.g. Push)」を選択する必要がありました。これですべてが正常に動作します。
基本的に、Jomaferの答えは部分的に正しいです。プッシュするコントローラーの前には、UINavigationControllerを付ける必要があります。 UINavigationControllerをプッシュする必要はまったくありません。ストーリーボードがUINavigationController内でそれを知っている限り、すべてが順調です。
テストで "Show"セグエがモーダルセグエとして表示される場合、通常は次の2つの問題のいずれかです。
最初のビューコントローラーはナビゲーションコントローラー内にありません。
ストーリーボードXMLが破損しています。
#2の解決策は通常、セグエを削除して置き換えることであり、それ自体が修正されるはずです。他のプレゼンテーションスタイルに切り替えて実行し、「表示」に戻すだけで修正される場合があります。
これは、「Show Detail」セグエにも発生する可能性があり、より油断ならない場合があります。
例:UISplitViewControllerに配置された一連のビューコントローラーがあります。表示->表示->表示->詳細の表示のセグエがあります。最後のセグエはモーダルになり続けました。私はその最後のセグエを修正するためにすべてを試みました。問題はアップストリームショーセグエが破損してショーディティールセグエになっていたことです(ストーリーボードがショーセグエだとまだ言っていたとしても)。私はiPhoneでテストしていましたが、iPadシミュレーターで実行するまで実際の問題を発見できませんでした。セグエは、Show-> Show-> Show Detail-> Show Detailになりました。 iPhoneでは、3番目のセグエはナビゲーションコントローラーに折りたたまれたため、ショーのように見えました。ただし、それはdetailビューコントローラーであり、Show Detail from詳細ビューコントローラーを持つことはできないため、OSはビューコントローラーを取得するためにできることを実行します画面に表示し、モーダルに表示します。
レッスン1:常にiPadでUISplitViewControllerをテストして、セグエが意図したとおりに動作していることを確認します。
レッスン2:セグエが予期せずモーダルになる場合は、pstreamセグエの破損と問題のセグエをチェックします。
私の場合の問題は、Show(e.g. Push)segue beforeを作成して、ViewControllerをUINavigationControllerのrootViewControllerとして配置することでした。つまり、UINavigationControllerがありませんでした。それから私はシークを削除しましたINavigationControllerを追加して再度シークを追加しましたそしてそれはうまくいきました。 Xcode 9.0.1/iOS 11.0.3でテスト済み。