У меня возникла странная проблема. У меня есть меню слайдов в моем приложении по какой-то неизвестной причине каждый раз, когда я перехожу из одного представления в другое с помощью инструкции .pushViewController, действия контроллера навигации смешно, и он сбрасывает мои UIBarButtonItems. (Они меняются на исходный оттенок, а значок badgeValue исчезает).UINavigationController, действующий смешно после pushViewController UPDATE 2
Это методы я использую в выдвижном меню, чтобы сделать переход:
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's own documentation: объект
UINavigationItem управляет кнопки и представления должны быть , отображаемые в объекте UINavigationBar. При построении интерфейса навигации каждый контроллер представления, вставленный в стек навигации, должен иметь объект UINavigationItem, который содержит кнопки и представления , который должен отображаться на панели навигации. Объект управления UINavigationController использует навигационные элементы верхнего контроллера , чтобы заполнить панель навигации контентом.
Но это явно не происходит, кнопка есть в межфазных границах строителя, и он работает, когда я землю на этой точку зрения, не используя меню слайда, но он исчезает, когда я нажимаю любой вариант моего меню слайда.
Это код, у меня есть на моем методе viewDidLoad на этой точке зрения
override func viewDidLoad() {
super.viewDidLoad()
addSlideMenuButton()
Carrito.numProd = productosCarrito.count
print(productosCarrito.count)
var numeroProductos = String(Carrito.numProd)
navigationItem.rightBarButtonItem?.badgeValue = numeroProductos
}
Если я достигаю страницы без использования slidemenu (например, когда вы непосредственно перейти туда после успешно очищая вид входа в систему) 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
Я удалил кнопку segue, и она превратилась в синюю, поэтому я изменил оттенок, и теперь tintColor в порядке, но badgevalue исчезает по неизвестной причине. Я проверил и перепроверял код, но нет ручной настройки. Существует только ссылка на кнопку. '@IBOutlet weak var carritoButton: UIBarButtonItem!' Я попытался использовать эту ссылку для установки значения вместо: 'carritoButton.badgeValue = numeroProductos', который он работает, когда я приземляюсь, но не в меню слайдов, которое в основном такое же, как раньше. –
@ Sulthan Я обнаружил, что если отключить анимацию, значение badgevalue не исчезнет, но мне нужно, чтобы меню слайдов было анимировано. –