0

У меня возникла странная проблема. У меня есть меню слайдов в моем приложении по какой-то неизвестной причине каждый раз, когда я перехожу из одного представления в другое с помощью инструкции .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 использует навигационные элементы верхнего контроллера , чтобы заполнить панель навигации контентом.

Но это явно не происходит, кнопка есть в межфазных границах строителя, и он работает, когда я землю на этой точку зрения, не используя меню слайда, но он исчезает, когда я нажимаю любой вариант моего меню слайда.

enter image description here

Это код, у меня есть на моем методе 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 показан правильно

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

Я удалил кнопку segue, и она превратилась в синюю, поэтому я изменил оттенок, и теперь tintColor в порядке, но badgevalue исчезает по неизвестной причине. Я проверил и перепроверял код, но нет ручной настройки. Существует только ссылка на кнопку. '@IBOutlet weak var carritoButton: UIBarButtonItem!' Я попытался использовать эту ссылку для установки значения вместо: 'carritoButton.badgeValue = numeroProductos', который он работает, когда я приземляюсь, но не в меню слайдов, которое в основном такое же, как раньше. –

+0

@ Sulthan Я обнаружил, что если отключить анимацию, значение badgevalue не исчезнет, ​​но мне нужно, чтобы меню слайдов было анимировано. –

ответ

1

Я нашел решение, и это очень просто на самом деле, то избежать этого поведение по badgeValue должен быть установлен в viewDidLayoutSubViews() вместо viewDidLoad()

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

EDIT библиотека MikeMTOL является глючит и вызывает много проблем не только это так для Swift Users, я рекомендую эти расширения вместо этого. ->link