首页 > 解决方案 > 根据 UIPickerViewSelection 创建警告

问题描述

所以这就是我想要做的。

我正在开发一个应用程序,该应用程序允许我工作的公司查看他们在购买时应使用的帐号。在某些地方,成本应该根据位置分配到不同的帐户,但它们仅适用于少数几个。我想以我已经编码的弹出窗口的形式发出警告。我的思考过程是我可以使用 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)"
    }

标签: swiftuipickerview

解决方案


我更喜欢 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,您使用它来向用户显示警告。


推荐阅读