Как установить RootViewController на основе данных JSON в Swift

Я новичок в свифте. Я использую этот боковое меню.

В моем проекте есть 2 роли:

  1. Менеджер
  2. Работник

Мне нужно установить боковое меню и RootVC на основе данных JSON. В боковом меню менеджера A, B, C, D, E и в боковом меню In Employee A, B, C, D.

Здесь я столкнулся с проблемой. Если Role == 5 (Manager), как установить SideMenu и RootVc, а если Role == 4 (Employee) Как установить SideMenu и RootVc.

В обоих случаях мне нужно установить разные RootVC для менеджера и сотрудника.

Здесь я рисую один дизайн изображение. Пожалуйста, помогите мне, как решить эту проблему.

Мой код Appdelegate

@objc func loginUser() {
        let userId = UserDefaults.standard.string(forKey: "userId")
        let role = UserDefaults.standard.integer(forKey: "Role")
        if userId == nil{
            let storyboard = UIStoryboard(name: "Main", bundle: nil)
            let controller = storyboard.instantiateViewController(withIdentifier: "GSLogOutViewController")
            self.window?.rootViewController?.present(controller, animated: true, completion: nil)
            self.window?.makeKeyAndVisible()
        }else{
            var initialViewController = UIViewController()
            let storyboard = UIStoryboard(name: "Main", bundle: nil)

            if role == 5{
                initialViewController = storyboard.instantiateViewController(withIdentifier: "GSMyTeamViewController") as! GSMyTeamViewController
            }
            else if role == 4{
                initialViewController = storyboard.instantiateViewController(withIdentifier: "GSDashboardViewController") as! GSDashboardViewController
            }
            self.window?.rootViewController = initialViewController
            self.window?.makeKeyAndVisible()
        }
    }

Данные сотрудника JSON:

JSON: {
    result =     {
        "Progress_status" = 0;
        Role = 4;
        Source = "default-image.jpg";
        email = "[email protected]";
        userId = 32;
    };
    status = 200;
}

Данные диспетчера JSON:

JSON: {
        result =     {
            "Progress_status" = 0;
            Role = 5;
            Source = "default-image.jpg";
            email = "[email protected]";
            userId = 4;
        };
        status = 200;
    }

Можете ли вы показать код того, что вы пробовали, и как выглядит ваш JSON?

André Slotta 24.06.2018 11:15

Привет @ AndréSlotta, я добавил код и данные json.

Appu Y 25.06.2018 08:08

С какой именно проблемой вы столкнулись? Вы откуда-то вызывали эту функцию loginUser?

Van 02.07.2018 08:36

Да @Van, я звоню в Эпплгейт. Как установить контроллер корневого представления после входа в систему. Я проверяю его менеджера или сотрудника, если менеджер должен показать GSMyTeamViewController, иначе GSDashboardViewController

Appu Y 02.07.2018 08:47

Это вы уже написали в своем коде, верно? Итак, дело в том, с какой проблемой вы столкнулись в своем коде? Или ваш вопрос - как вызвать эту функцию loginUser?

Van 02.07.2018 08:49

Да, я уже установил, но кнопка бокового меню не отображается в верхней левой панели.

Appu Y 02.07.2018 08:52
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
6
74
1

Ответы 1

Обычно я справляюсь с этой ситуацией так:

1- Добавьте все параметры как для менеджера, так и для сотрудника (например: [A, B, C, D, E]) в боковое меню в виде таблицы.

2- После получения ответа JSON проверьте тип пользователя (менеджер или сотрудник).

3- Переопределить функцию делегата tableView tableView(_:heightForRowAt:):

override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
    switch indexPath.row {
        case 4:
            // 'E' row -> use ternary operator here to check the user role
            // if it's Manager the cell height will be 40.0 (for example)
            // if it's Employee the 'E' row height will be 0.0 (i.e: hidden)
            return role == "Employee" ? 0.0 : 40.0
        break
        default:
            //other rows
            return 40.0
        break
    }
}

4- Не забудьте перезагрузить tableView после получения JSON:

tableView.reloadData()

спасибо за ответ, а вот как установить RootVC. В моем случае менеджер RootVC другой, а сотрудник RootVC другой.

Appu Y 25.06.2018 11:41

Другие вопросы по теме