Выбор варианта из раскрывающегося меню и его размещение в заданном c месте массива - PullRequest
0 голосов
/ 07 мая 2020

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

Я провел некоторое тестирование, и мне кажется, что все мои инструкции if-else логически верны, поэтому я не знаю, почему они не работают с первого раза? Когда я запускаю код, я не получаю никаких ошибок или чего-либо еще. Я новичок в программировании как в Xcode, так и в Swift, поэтому он состоит в основном из операторов if-else.

Вот мой код:

@IBOutlet weak var RCT1: UIButton!
@IBOutlet weak var RCT2: UIButton!
@IBOutlet weak var RCT3: UIButton!

var selectedButton = UIButton()
var dataSource = [String]()
var selectedAnswerArray : [String] = ["", "", ""]
var selectedAnswer : String = "blank"

@IBAction func RCT1Select(_ sender: Any) {
        dataSource = ["test1", "test2", "test3", "test4"]
        selectedButton = RCT1
        if selectedButton == RCT1 && selectedAnswer == "test1"{
            selectedAnswerArray[0] = "test1"
        }
        else if selectedButton == RCT1 && selectedAnswer == "test2"
        {
            selectedAnswerArray[0] = "test2"
        }
        else if selectedButton == RCT1 && selectedAnswer == "test3"
        {
            selectedAnswerArray[0] = "test3"
        }
        else if selectedButton == RCT1 && selectedAnswer == "test4"
        {
            selectedAnswerArray[0] = "test4"
        }
        else{
        }
        addTransparentView(frames: RCT1.frame)
    }

    @IBAction func RCT2Select(_ sender: Any) {
        selectedButton = RCT2
        dataSource = ["test5", "test6", "test7", "test8"]
        if selectedButton == RCT2 && selectedAnswer == "test5"{
            selectedAnswerArray[1] = "test5"
        }
        else if selectedButton == RCT2 && selectedAnswer == "test6"
        {
            selectedAnswerArray[1] = "test6"
        }
        else if selectedButton == RCT2 && selectedAnswer == "test7"
        {
            selectedAnswerArray[1] = "test7"
        }
        else if selectedButton == RCT2 && selectedAnswer == "test8"
        {
            selectedAnswerArray[1] = "test8"
        }
        else{
        }
        addTransparentView(frames: RCT2.frame)
    }

    @IBAction func RCT3Select(_ sender: Any) {
        dataSource = ["test9", "test10", "test11", "test12"]
        selectedButton = RCT3
        if selectedButton == RCT3 && selectedAnswer == "test9"{
            selectedAnswerArray[2] = "test9"
        }
        else if selectedButton == RCT3 && selectedAnswer == "test10"
        {
            selectedAnswerArray[2] = "test10"
        }
        else if selectedButton == RCT3 && selectedAnswer == "test11"
        {
            selectedAnswerArray[2] = "test11"
        }
        else if selectedButton == RCT3 && selectedAnswer == "test12"
        {
            selectedAnswerArray[2] = "test12"
        }
        else{
        }
        addTransparentView(frames: RCT3.frame)
    }

extension GamePage: UITableViewDelegate, UITableViewDataSource{
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        selectedButton.setTitle(dataSource[indexPath.row], for: .normal)
        selectedAnswer = dataSource[indexPath.row]
        removeTransparentView()
    }
}

Если кто-нибудь может помочь мне понять выяснить, почему он не работает, или может указать мне правильное направление, что было бы очень полезно!

1 Ответ

0 голосов
/ 19 мая 2020

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

Во-первых, вы хотите избавиться от логического оператора selectedButton == RCT1, который у вас есть для каждого if, поскольку вы устанавливаете переменную равной RCT1 прямо перед операторами if. Следовательно, этот оператор всегда будет истинным.

Во-вторых, если нет другого кода, который находится под последним оператором else, вы можете избавиться от него. Желательно включать только последний оператор else, когда есть фрагмент кода, который вы хотите выполнить, если все остальные операторы if / else if ложны.

Наконец, чтобы ответить на ваш вопрос, вы должны присвоить значение переменной selectedAnswer, если вы хотите добавить значение в массив selectedAnswerArray. Исходя из вашего текущего кода, ни один из операторов if не будет выполняться, кроме последнего оператора else (под которым нет кода), потому что selectedAnswer всегда пусто. Следовательно, вы можете захотеть присвоить значение, такое как «test1» или что-то в этом роде, чтобы выполнялся один из операторов if.

Чтобы дать вам более чистую версию вашего кода, вот что я предложил *. 1015 *

@IBAction func RCT1Select(_ sender: Any) {
        dataSource = ["test1", "test2", "test3", "test4"]
        selectedButton = RCT1
        //change the value of selectedAnswer so that one of the if statements will execute
        //I got rid of selectedButton == RCT1 since that will always return true
        if selectedAnswer == "test1"{
            selectedAnswerArray[0] = "test1"
        }
        else if selectedAnswer == "test2"
        {
            selectedAnswerArray[0] = "test2"
        }
        else if selectedAnswer == "test3"
        {
            selectedAnswerArray[0] = "test3"
        }
        else if selectedAnswer == "test4"
        {
            selectedAnswerArray[0] = "test4"
        }
        //Don't need a final else statement if nothing is going to run under that  
        addTransparentView(frames: RCT1.frame)
}

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

https://podcasts.apple.com/us/podcast/developing-ios-11-apps-with-swift/id1315130780

Если вы посмотрите первую серию, профессор обратится к множество распространенных ошибок, которые новички совершают более подробно, чтобы вы могли их понять.

Удачи и, надеюсь, я исправил вашу проблему

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