私は奇妙な問題を抱えています.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)
アニメーションをオフにしてもバッジの値が消えないことを発見しましたが、アニメーションも機能させる必要があります。