Строки TableView скрываются и отображаются как функция Bool - PullRequest
0 голосов
/ 21 ноября 2018

Как показано на рисунке, изначально мне нужно скрыть последние 2 строки (мой профиль и профиль обновления) в моем табличном представлении, когда пользователь заполняет форму, доступную через строку «Стать продавцом».Мне нужно скрыть строку «Стать продавцом» и показать последние два ряда.Это делается с помощью функции Bool (true / false).

check image

Как я могу это сделать?

var arrdata = ["Home", "Orders", "Change Password", "Log Out", "Become A Merchant", "My Profile", "Update Profile"]

override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        var isMerchantProfile: Bool = UserDefaults.standard.bool(forKey: "isFillMerchant")
        if isMerchantProfile == true {
            return 4
        }

        return arrdata.count
}

Ответы [ 3 ]

0 голосов
/ 21 ноября 2018

Я бы скорректировал данные / массив при вызове reloadTable для соответствия ожидаемому поведению.

var arrdata = ["Главная", "Заказы", "Изменить пароль", "Выйти", "Мой профиль", "Обновить профиль"], а затем:

var arrdata= ["Домой", "Заказы", "Изменить пароль", "Выйти", "Стать продавцом", "Мой профиль", "Обновить профиль"], если вы хотите, чтобы это отображалось.

0 голосов
/ 21 ноября 2018

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

enum UserType {
   case basic
   case merchant
}

Затем, когда вы загружаете данные в табличное представление, просто включите UserType и загрузите правильный набор данных.Это позволит вам использовать эту реализацию в других местах вашего приложения, а также, если вам нужно будет добавить / удалить данные / представления в зависимости от типа пользователя.Таким образом, ваши меню будут выглядеть примерно так:

let basicUserMenu = ["Home", "Orders", "Change Password", "Log Out", "Become Merchant"]
let merchantUserMenu = basicUserMenu + ["My Profile", "Update Profile"]

И тогда ваша реализация табличного представления будет выглядеть примерно так, где userType - это сохраненное вами значение перечисления UserType.По умолчанию это будет .basic, но после того, как пользователь заполнит форму, она изменится на .merchant

override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    switch userType {
        case .basic:
            return basicUserMenu.count
        case .merchant:
            return merchantUserMenu.count
    }
 }

Затем сделайте то же самое для cellForTowAtIndexPath

0 голосов
/ 21 ноября 2018

Удалите / добавьте строки, которые вы хотите показать из массива данных, а затем используйте функции табличного представления insertRowsAt / deleteRowsAt.Выполняйте массовые обновления, используя функцию performBatchUpdates.

См. Документацию UITableView .

Я бы также рекомендовал в этом случае использовать enum для определения ваших строки вместо необработанных строк, представляющих заголовки строк.

например (внутри класса контроллера представления все в порядке)

enum Row {
    case home, orders, changePassword, logout, becomeMerchant, myProfile, updateProfile

    var title: String {
        switch self {
        case .home:
            return NSLocalizedString("Home", comment: "Row title")
        // … etc
        }
    }
}

Тогда будет немного проще найти строки, которые вы хотите удалить/ где вставить ваши строки и сохранить ваш код в чистоте.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...