12

ストーリーボード画像

ユーザーがログインしていない場合に起動する初期ビューコントローラーであるタブバーコントローラーPFLoginViewControllerがあります。ログイン/サインアップフローは正常に機能します。

2 つのタブは、1. aUICollectionViewと呼びますIntroVC。2. aUITableViewと呼びます。FeedVC

ユーザーが で写真をクリックすると、技術的にタブではない3 番目の画面 ( ) をIntroVC表示する Show segue が ( 経由で) トリガーされます。これからはこれを と呼びます。prepareForSegueUIViewSelectVC

注: これらの画面はすべて、Navigation Controller にも埋め込まれています。

SelectVC写真を表示UIButtonし、ユーザが押して Show segue と Unwind segue をトリガーし、イメージを にプッシュできる がありFeedVCます。Unwind セグエを作成した理由は、それがないと、画像がFeedVC(2 番目のタブ) に押し込まれますが、最初のタブは引き続き強調表示されるためです。

Unwind セグエでこれを修正しましたが、選択後に最初のタブ (Intro VC) を押すと、ナビゲーション バーに [戻る] ボタンが表示され、SelectVCボタンを押す回数が増えるという問題があることに気付きました。で戻るボタンを押さなければならない回数が増えIntroVCます。これを修正する方法について非常に混乱しています。フローを適切に接続していないようで、IntroVC複数回生成されているようです。

Simulator でセグエを実行すると、コンソールに次のメッセージが表示されます。

Nested pop animation can result in corrupted navigation bar

Finishing up a navigation transition in an unexpected state. Navigation Bar subview tree might get corrupted.

どんな助けでも大歓迎です!

以下の関連コード。

IntroVC.swift

@IBAction func unwindToIntroView(segue: UIStoryboardSegue) {
    self.tabBarController!.selectedIndex = 1


override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    if segue.identifier == "showFeedItem" {
        let selectScreenVC = segue.destinationViewController as! SelectScreenViewController
        let cell = sender as! UICollectionViewCell
        if let indexPath = self.collectionView!.indexPathForCell(cell) {
            self.navigationController?.popViewControllerAnimated(true)
            selectScreenVC.currentVenue = venueItems[indexPath.row]
        }
}

SelectVC.swift

@IBAction func pushSelection(sender: UIButton) {
    var feedItem = FeedItem()
    if let currentItem = currentItem {
        feedItem.nName = currentItem.nName
        feedItem.imageFile = currentItem.lgImg
        feedItem.userName = PFUser.currentUser()!.username!
        feedItem.saveInBackgroundWithBlock({ (success: Bool, error: NSError?) -> Void in
            self.performSegueWithIdentifier("unwindToVenueView", sender: self)
        })
    }
}

これが奇妙に構成されていることは承知しています。完全に理解するために必要な情報が不足している場合は、お知らせください。適宜編集します。

4

3 に答える 3

0

あなたの問題はこの行にあると思います(prepareForSegueメソッド)

self.navigationController?.popViewControllerAnimated(true)

SelectVC を提示する前に、View Controller をスタックからポップしようとしているためです。これが、ナビゲーション バーが破損する原因である可能性があります (ルート ビュー コントローラーをポップするとどうなるでしょうか?)。代わりに次の方法を試すことができます。

self.navigationController?.popToRootViewControllerAnimated(true)
于 2015-05-01T16:17:20.250 に答える