Создать предупреждение на основе UIPickerViewSelection - PullRequest
0 голосов
/ 02 мая 2018

Итак, вот что я пытаюсь сделать.

Я работаю над приложением, которое позволяет компании, в которой я работаю, видеть, какой номер счета они должны использовать при совершении покупки. Есть определенные места, где затраты должны быть разделены на разные аккаунты в зависимости от местоположения, но это только для определенных немногих. Я хотел бы выдать предупреждение в виде всплывающего окна, которое я уже закодировал. Мой мыслительный процесс заключается в том, что я могу использовать операторы if / else для выдачи того, что мне нужно, но я не уверен, как это сформулировать. Он будет предоставлять обычный номер счета, если учетные записи не должны быть разделены, но затем предупреждение, если это произойдет. Код ниже. Моя проблема находится под didSelectRow.

Что на самом деле не показано, так это PopUpVC, который я использую, и полный список данных массива, потому что он длинный.

Большое спасибо этому сайту, так как он действительно помог мне написать мой первый проект!

let account: [Account] = [Account(number: 0, description: "SELECT")]
//there is actually more data here but I am taking it out so it's shorter

let tasks: [Task] = [Task(number: 0, description: "SELECT")]
//there is actually more data here but I am taking it out so it's shorter

let locations: [Location] = [Location(number: 0, description: "SELECT")]
//there is actually more data here but I am taking it out so it's shorter

func numberOfComponents(in pickerView: UIPickerView) -> Int {
    return 3
}

func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
    if component == accountsComponent {
        return account.count
    } else if component == tasksComponent {
        return tasks.count
    } else if component == locationsComponent {
        return locations.count
    }
    return 0
}

func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
    if component == accountsComponent {
        return account[row].description
    } else if component == tasksComponent {
        return tasks[row].description
    } else if component == locationsComponent {
        return locations[row].description
    }
    return nil
}

func pickerView(_ pickerView: UIPickerView, viewForRow row: Int, forComponent component: Int, reusing view: UIView?) -> UIView {
    if component == accountsComponent {
        let label = (view as? UILabel) ?? UILabel()
        label.font = label.font.withSize(12)
        label.textAlignment = .center

        label.text = account[row].description
        return label
    }
    if component == tasksComponent {
        let label = (view as? UILabel) ?? UILabel()
        label.font = label.font.withSize(12)
        label.textAlignment = .center
        label.text = tasks[row].description
        return label
    }
    if component == locationsComponent {
        let label = (view as? UILabel) ?? UILabel()
        label.font = label.font.withSize(12)
        label.textAlignment = .center
        label.text = locations[row].description
        return label
    } else {
        let label = (view as? UILabel) ?? UILabel()
        label.font = label.font.withSize(10)
        label.textAlignment = .center
        label.text = account[row].description
        return label
    }
}

func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
    pickerView.reloadAllComponents()

    let selectedAccount = pickerView.selectedRow(inComponent: 0)
    let selectedTask = pickerView.selectedRow(inComponent: 1)
    let selectedLocation = pickerView.selectedRow(inComponent: 2)
    let ACCOUNTS = account[selectedAccount].description
    let TASKS = tasks[selectedTask].description
    let LOCATION = locations[selectedLocation].description

    let ACCOUNTSNUMBER = account[selectedAccount].number
    let TASKSNUMBER = tasks[selectedTask].number
    let LOCATIONNUMBER = locations[selectedLocation].number

    if pickerView.selectedRow(inComponent: 2) = 10 //this is what I am unsure of how to do {

        textViewInput = "WARNING - this should be split"
    }

    else {

        textViewInput = "\(ACCOUNTSNUMBER) \(TASKSNUMBER) \(LOCATIONNUMBER)"
    }

1 Ответ

0 голосов
/ 02 мая 2018

Я предпочитаю операторы switch длинному ряду операторов if-else if-else. Я бы лично сделал что-то вроде этого:

switch pickerView.selectedRow(inComponent: 2) {
case 10, 11, 12:
    present(popUpVc, animated: true)
default:
    textViewInput = "\(ACCOUNTSNUMBER) \(TASKSNUMBER) \(LOCATIONNUMBER)" 
}

В этом случае вы бы заменили то, что я положил как 10, 11, 12, на те строки, которые вы определили для разделения счетов. Я также предполагаю, что PopUpVC - это UIAlertController, который вы используете для отображения предупреждения пользователю.

...