0

私はかなり初心者で、マスター詳細アプリケーションでセグエを巻き戻すのに苦労しています。

iPhoneでポップオーバーを閉じると、巻き戻しがうまくいくようですが、iPadで同じことをしようとすると、ポップオーバーが残ります。

提示側のviewControllerの巻き戻し処理アクションにdismissViewControllerAnimatedを追加すると、iPadバージョンは正常に動作し、ポップオーバーを閉じますが、iPhoneバージョンはポップオーバーを閉じてから、ポップオーバーを表示したビューを閉じます。つまり、2 つのビューを却下します。

問題は、iPhone などでモーダルに表示されると、ポップオーバーが巻き戻しで自動的に閉じられることです。ただし、真のポップオーバーとして提示されると、巻き戻しセグエで却下されません。ポップオーバーのみが閉じられるように、両方のケースを管理する方法を誰かが教えてくれませんか。事前にどうもありがとうございました。

4

1 に答える 1

0

わかった。これに長い間取り組んだ後、私はなんとか解決策を思いつきました。私は popoverpresentationcontroller を使用し、提示コントローラーをデリゲートとして宣言しました。次に、モーダル表示の代わりにポップオーバーを使用するよう iPhone に強制する機能を追加することで、iPhone と iPad で表示と非表示が一貫したものになります。コードは以下です。if let vc ステートメントで一般的な UIViewController を使用したので、ナビゲーション コントローラーにも埋め込まれているポップオーバーでこれを使用できます。

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    if let identifier = segue.identifier {
        switch identifier {
        case "My Segue Identifier" :
            if let vc = segue.destinationViewController as? UIViewController {
                if let ppc = vc.popoverPresentationController {
                    ppc.delegate = self
                }
            }
        default: break
        }
    }
}

さらに、iPhone でのモーダル表示を防ぐために、次の関数を追加する必要があります。

func adaptivePresentationStyleForPresentationController (controller:UIPresentationController)-> UIModalPresentationStyle {
    return UIModalPresentationStyle.None
}
于 2015-05-03T00:57:24.357 に答える