0

私は奇妙な問題を抱えています。アプリがスライドするメニューを持っています。何か不明な理由のために、ナビゲーションコントローラが動作する.pushViewController命令を使用して別のビューに移動するたびに面白いと私のUIBarButtonItemsをリセットします。 (元の濃淡に変わり、badgeValueが消えます)。UINavigationControllerはpushViewControllerの後に面白いですか?

これは私が移行を行うためにスライドメニューで使用している方法である:Apple's own documentationによると

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: "") 
    } 
} 

UINavigationItemオブジェクトが管理しますボタンとビューは で、UINavigationBarオブジェクトに表示されます。ナビゲーション インターフェイスを構築するとき、ナビゲーションスタックにプッシュされた各ビューコントローラは、 に、ナビゲーションバーに表示されるボタンとビューを含むUINavigationItemオブジェクトを持っていなければなりません。管理する UINavigationControllerオブジェクトは、コンテンツをナビゲーションバーに挿入するために、上位の 2つのビューコントローラのナビゲーション項目を使用します。

しかし、これは明らかに起きていない、ボタンがinterfaseビルダーであり、私はスライドメニューを使用せずに、そのビューに着陸するとき、それは動作しますが、私は私のスライドメニューのいずれかのオプションをクリックしたときにそれが消えます。

enter image description here

これは、私はあなたが正常にログインビューをクリアした後にそこセグエときと同じように(slidemenuを使用せずにページに到達した場合、私はそのビュー

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

} 

に私のviewDidLoadメソッドで持っているコードです)badgeValueが正しく

enter image description here

を示した。しかし、私は使用している場合されますスライドメニューこれは、この問題を引き起こしている可能性がどのように

enter image description here

任意のアイデアをどうなりますか?

UPDATE

私が何かを発見しました。私はopenVIewControllerBasedOnIdentifierメソッドまたはslideMenuSelectedAtIndex

navigationItem.rightBarButtonItem?.badgeValue = "25" 

badgevalueがちょうど消える前にその番号に変更されますのいずれかで、この命令を挿入した場合

、私はまた、この命令

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

を使用していますデバッグコンソールでこれを取得するので、値はそこにあります:

Badge Value: Optional("40") 

しかし、それは

UDATE 2

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

消えいくつかの未知の理由で、私はアニメーションをオフにした場合badgevalueは消えていないことを発見し、私はあまりにも動作するようにアニメーションを必要としています。

+1

コードで 'rightBarButtonItem'または' tintColor'を手動で設定していないか確認してください。 – Sulthan

+0

ボタンが持っていたセグを削除して青色に変わったので、色合いを変更しましたが、今度はtintColorは問題ありませんが、何らかの不明な理由でbadgevalueが消えてしまいます。私はコードをチェックして再確認しましたが、手動設定はありません。ボタンへの参照のみがあります。 '@IBOutlet weak var carritoButton:UIBarButtonItem!'私はその参照を使用して値を設定しようとしましたが、基本的には以前と同じスライドメニューには表示されません。 'carritoButton.badgeValue = numeroProductos' –

+0

@ Sulthanアニメーションをオフにすると、バッジ値が消えないことがわかりましたが、スライドメニューをアニメーション化する必要があります。 –

答えて

1

私は解決策を発見し、それは非常に簡単なのは、実際に、回避はこの動作badgeValueはEDIT MikeMTOLのライブラリは、バグがあるだけでなく、多くの問題が発生する代わりにviewDidLoad()

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

viewDidLayoutSubViews()に設定する必要がありますこれはSwiftユーザーのために、私はこれらの拡張を代わりに推奨します。 - >link

関連する問題