UITabBarController должен выбрать, чтобы элемент «больше» не отображался, когда он должен - PullRequest
0 голосов
/ 30 мая 2019

Я успешно запретил пользователю вводить элемент панели вкладок, который позволяет добавлять слова в таблицу, если языки не введены или не выбраны в другом элементе панели вкладок, называемом языками.Моя проблема заключается в том, что он также блокирует пользователю доступ к элементу панели «Больше» при тех же условиях, тем больше контроллер представления должен быть всегда доступен.

Итак, я попробовал пару подходов, во-первых, случай переключенияоператор, а второй использует ключевое слово guard и shouldSelect параметр 'viewController'.Оба создают одинаковые результаты (больше вкладка недоступна, когда это должно быть).

Вот версия оператора регистра переключателя:

func tabBarController(_ tabBarController: UITabBarController,     shouldSelect viewController: UIViewController) -> Bool {

        loadLanguages()
        chosenLanguageRemovedLoad()

        print("tabBarController shouldSelect languages \(languages) and chosenLanguageRemoved \(chosenLanguageRemoved)")

        switch viewController {
        case is LanguagesViewController:
            return true
        case is WordsViewController:
            if languages.isEmpty == true || chosenLanguageRemoved == true {
                shouldSelect = false
            } else {
                shouldSelect = true
            }
            if shouldSelect == false {
                if languages.isEmpty == true && chosenLanguageRemoved == false {
                    let ac = UIAlertController(title: "Add Language(s)", message: nil, preferredStyle: .alert)
                    let okAction = UIAlertAction(title: "OK", style: .default)
                    ac.addAction(okAction)
                    present(ac, animated: true)
                } else if languages.isEmpty == false && chosenLanguageRemoved == true {
                    let ac = UIAlertController(title: "Choose a Language", message: nil, preferredStyle: .alert)
                    let okAction = UIAlertAction(title: "OK", style: .default)
                    ac.addAction(okAction)
                    present(ac, animated: true)
                } else if languages.isEmpty == true && chosenLanguageRemoved == true {
                    let ac = UIAlertController(title: "Add Language(s) and choose a language", message: nil, preferredStyle: .alert)
                    let okAction = UIAlertAction(title: "OK", style: .default)
                    ac.addAction(okAction)
                    present(ac, animated: true)
                }
            }
            break;
        case is MoreViewController:
            return true
        default:
            break;
        }
        myTabBarDelegate?.shouldPerformSegue()
        return true
    }

А вот версия слова защитного ключа:

func tabBarController(_ tabBarController: UITabBarController, shouldSelect viewController: UIViewController) -> Bool {

        loadLanguages()
        chosenLanguageRemovedLoad()

        print("tabBarController shouldSelect languages \(languages) and chosenLanguageRemoved \(chosenLanguageRemoved)")

        guard viewController is MoreViewController else {
            if languages.isEmpty == true && chosenLanguageRemoved == false {
                let ac = UIAlertController(title: "Add Language(s)", message: nil, preferredStyle: .alert)
                let okAction = UIAlertAction(title: "OK", style: .default)
                ac.addAction(okAction)
                present(ac, animated: true)
                return false
            } else if languages.isEmpty == false && chosenLanguageRemoved == true {
                let ac = UIAlertController(title: "Choose a Language", message: nil, preferredStyle: .alert)
                let okAction = UIAlertAction(title: "OK", style: .default)
                ac.addAction(okAction)
                present(ac, animated: true)
                return false
            } else if languages.isEmpty == true && chosenLanguageRemoved == true {
                let ac = UIAlertController(title: "Add Language(s) and choose a language", message: nil, preferredStyle: .alert)
                let okAction = UIAlertAction(title: "OK", style: .default)
                ac.addAction(okAction)
                present(ac, animated: true)
                return false
            } else {
                return true
            }
        }
        myTabBarDelegate?.shouldPerformSegue()
        return true
    }

Я правильно настроил делегат и протоколы (согласно учебному пособию).Я попытался поместить метод shouldPerformSegue в класс контроллера more view, но он снова дает те же результаты.

...