swift - 根据 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)"
}
解决方案
我更喜欢 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,您使用它来向用户显示警告。