Установка значка на элементе вкладки выбранного типа (не зная его индекса) - PullRequest
0 голосов
/ 26 июня 2019

В моем приложении есть панель вкладок.Я хочу отобразить значок с несколькими непрочитанными сообщениями, когда приходит уведомление.Пока мой код ниже.Проблема в том, что вкладка сообщений не всегда является первым элементом в списке (порядок варьируется для разных настроек приложения, но он всегда есть).Как мне установить значок на нем, если я не знаю, какой у него индекс?

    if let item = self.tabBar.items?.first {
    var count = messages.count
        if item.badgeValue != nil {
            count += Int(item.badgeValue!) ?? 0
        }
        item.badgeValue = "\(count)"
    }

Ответы [ 2 ]

1 голос
/ 26 июня 2019

Вы получаете первый элемент в первой строке - значит, он работает как положено. Вам нужно организовать свою UITabBar таким образом, чтобы вы всегда могли определить, какие индексные сообщения представлены.

Одной из идей будет сохранение ссылки на нее при настройке UITabBar - таким образом, вы всегда сможете найти, под какими индексными сообщениями показываются. Лучшим способом было бы сохранить соответствующий массив представлений, которые вы сохраняете за UITabBar, а затем найти тот, который вам нужен.

Если вы используете UITabBarController, вы получите его бесплатно - все UIViewController доступны напрямую через свойство с именем viewControllers.

Если у вас есть пользовательский ViewController и просто UITabBar - вам просто нужно создать аналогичную логику, которая позволит вам отслеживать, по какому индексу отображается определенный контроллер представления.

0 голосов
/ 26 июня 2019

Если ваша панель вкладок управляется UITabBarController, вы можете определить индекс, проверив тип контроллеров представления в контроллере панели вкладок.

class MessagesViewController: UIViewController {
    // ... your messages vc
}

if let index = tabbarController.viewControllers?.firstIndex(where: { $0 is MessagesViewController }) {
    tabbarController.tabBar.items?[index].badgeValue = "..."
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...