私は奇妙な問題を抱えています。アプリがスライドするメニューを持っています。何か不明な理由のために、ナビゲーションコントローラが動作する.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ビルダーであり、私はスライドメニューを使用せずに、そのビューに着陸するとき、それは動作しますが、私は私のスライドメニューのいずれかのオプションをクリックしたときにそれが消えます。
これは、私はあなたが正常にログインビューをクリアした後にそこセグエときと同じように(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が正しく
を示した。しかし、私は使用している場合されますスライドメニューこれは、この問題を引き起こしている可能性がどのように
任意のアイデアをどうなりますか?
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は消えていないことを発見し、私はあまりにも動作するようにアニメーションを必要としています。
コードで 'rightBarButtonItem'または' tintColor'を手動で設定していないか確認してください。 – Sulthan
ボタンが持っていたセグを削除して青色に変わったので、色合いを変更しましたが、今度はtintColorは問題ありませんが、何らかの不明な理由でbadgevalueが消えてしまいます。私はコードをチェックして再確認しましたが、手動設定はありません。ボタンへの参照のみがあります。 '@IBOutlet weak var carritoButton:UIBarButtonItem!'私はその参照を使用して値を設定しようとしましたが、基本的には以前と同じスライドメニューには表示されません。 'carritoButton.badgeValue = numeroProductos' –
@ Sulthanアニメーションをオフにすると、バッジ値が消えないことがわかりましたが、スライドメニューをアニメーション化する必要があります。 –