0

私は奇妙な問題を抱えています.pushViewController命令を使用してあるビューから別のビューに移動するたびに、不明な理由でアプリにスライドメニューがあります.Navigation Controllerがおかしくなり、UIBarButtonItemsがリセットされます. (元の色合いに変わり、badgeValue は消えます)。

これは、トランジションを行うためにスライド メニューで使用しているメソッドです。

func openViewControllerBasedOnIdentifier(_ strIdentifier:String){
    let destViewController : UIViewController = self.storyboard!.instantiateViewController(withIdentifier: strIdentifier)


    let topViewController : UIViewController = self.navigationController!.topViewController!

    if (topViewController.restorationIdentifier! == destViewController.restorationIdentifier!){
        print("Same VC")
    } else {
        var numeroProductos = String(Carrito.numProd)

        self.navigationController!.pushViewController(destViewController, animated: true)


    }
}

func slideMenuItemSelectedAtIndex(_ index: Int32) {
    let topViewController: UIViewController = self.navigationController!.topViewController!
    print("View Controller is : \(topViewController) \n", terminator: "")
    switch(index) {
    case 0:
        print("Home\n", terminator: "")

        self.openViewControllerBasedOnIdentifier("Home")

        break

    case 1:
        print("Play\n", terminator: "")

        self.openViewControllerBasedOnIdentifier("MiCuenta")

        break

    case 2:
        print("Play\n", terminator: "")

        self.openViewControllerBasedOnIdentifier("QuienesSomos")

        break

    case 3:
        print("Play\n", terminator: "")

        self.openViewControllerBasedOnIdentifier("NuestraCausa")

        break

    case 4:
        print("Play\n", terminator: "")

        self.openViewControllerBasedOnIdentifier("Contacto")

        break

    case 5:
        print("Play\n", terminator: "")

        self.openViewControllerBasedOnIdentifier("FAQ")

        break

    default:
        print("default\n", terminator: "")
    }
}

Apple自身のドキュメントによると:

UINavigationItem オブジェクトは、UINavigationBar オブジェクトに表示されるボタンとビューを管理します。ナビゲーション インターフェイスを構築する場合、ナビゲーション スタックにプッシュされる各ビュー コントローラーには、ナビゲーション バーに表示するボタンとビューを含む UINavigationItem オブジェクトが必要です。管理 UINavigationController オブジェクトは、最上部の 2 つのビュー コントローラーのナビゲーション項目を使用して、ナビゲーション バーにコンテンツを入力します。

ボタンはinterfaseビルダーにあり、スライドメニューを使用せずにそのビューに着陸すると機能しますが、スライドメニューのオプションをクリックすると消えます。

ここに画像の説明を入力

これは、そのビューのviewDidLoadメソッドにあるコードです

override func viewDidLoad() {
    super.viewDidLoad()
    addSlideMenuButton()
    Carrito.numProd = productosCarrito.count
    print(productosCarrito.count)
    var numeroProductos = String(Carrito.numProd)
    navigationItem.rightBarButtonItem?.badgeValue = numeroProductos

}

スライドメニューを使用せずにページにアクセスした場合 (ログインビューを正常にクリアした後にそこに移動した場合など)、badgeValue が適切に表示されます

ここに画像の説明を入力

しかし、スライドメニューを使用すると、これが起こります

ここに画像の説明を入力

この問題の原因について何か考えはありますか?

アップデート

何かを発見しました。

この命令を openVIewControllerBasedOnIdentifier メソッドまたは slideMenuSelectedAtIndex に挿入すると、

navigationItem.rightBarButtonItem?.badgeValue = "25"

バッジ値は消える直前にその数値に変更されます。私もこの命令を使用しています

print("Badge Value:\(navigationItem.rightBarButtonItem?.badgeValue as Any)")

デバッグコンソールでこれを取得するため、値はそこにあります:

Badge Value: Optional("40")

しかし、何らかの理由でそれは消えます

うだて2

 self.navigationController!.pushViewController(destViewController, animated: false)

アニメーションをオフにしてもバッジの値が消えないことを発見しましたが、アニメーションも機能させる必要があります。

4

1 に答える 1

1

私は解決策を見つけましたが、実際には非常に簡単です。この動作を回避するには、viewDidLayoutSubViews()代わりにBadgeValue を設定する必要がありますviewDidLoad()

override func viewDidLayoutSubviews() {
    var numeroProductos = String(Carrito.numProd)
    carritoButton.badgeValue = numeroProductos
}

編集MikeMTOL のライブラリはバグが多く、これだけでなく多くの問題を引き起こすため、Swift ユーザーにはこれらの拡張機能をお勧めします。->リンク

于 2017-01-09T16:22:39.830 に答える