首页 > 解决方案 > UIPickerView 选择输入 Swift 4 或 5

问题描述

我有一个UIPickerView从州数组中选择的,数组中的最后一项是“美国以外”。When the last item in the array is selected I want to show another input option for country.

目前我将国家输入设置为隐藏在viewDidLoad.

这是我试图让它工作的尝试,但它不断导致选择最后一个项目时崩溃。

var stateOptionsList = ["", "Alabama", "Alaska", "Arizona", "Arkansas", "California", "Colorado", "Connecticut", "Delaware", "District Of Columbia", "Florida", "Georgia", "Hawaii", "Idaho", "Illinois", "Indiana", "Iowa", "Kansas", "Kentucky", "Louisiana", "Maine", "Maryland", "Massachusetts", "Michigan", "Minnesota", "Mississippi", "Missouri", "Montana", "Nebraska", "Nevada", "New Hampshire", "New Jersey", "New Mexico", "New York", "North Carolina", "North Dakota", "Ohio", "Oklahoma", "Oregon", "Pennsylvania", "Rhode Island", "South Carolina", "South Dakota", "Tennessee", "Texas", "Utah", "Vermont", "Virginia", "Washington", "West Virginia", "Wisconsin", "Wyoming", "Outside The United States"]

let outsideOfUS = stateOptionsList[statePicker.selectedRow(inComponent: 52)] as String

print(outsideOfUS)

if selectStateInput.text == outsideOfUS {
    countryContainer.isHidden = false
} else {
    countryContainer.isHidden = true
}

我把 let outsideOfUsvar 放在 pickerView 中didSelectRow。不知道这是否是我应该放这个的地方。

标签: swiftuipickerview

解决方案


您正在使用:

selectedRow(inComponent: 52)

因此,毫无疑问,它会因以下错误消息而崩溃:

由于未捕获的异常“NSRangeException”而终止应用程序,原因:“*** -[__NSArrayM objectAtIndex:]: index 52 beyond bounds [0 .. 0]”

当它崩溃时,它通常会提供这样的有用消息。此消息告诉我们选择器只有一个组件。没有组件编号 52。

因此,只需直接从模型对象中获取项目:

let outsideOfUS = stateOptionsList[52]

或者,如果您稍后添加其他美国领土(例如波多黎各),则不必更改此设置,只需从列表中获取最后一个,例如

guard let outsideOfUS = stateOptionsList.last else { return }

推荐阅读