UIPickerView选择输入Swift4或5

UIPickerView selection input Swift 4 or 5

我有一个 UIPickerView 从状态数组中选择,数组中的最后一项是“美国以外”。选择数组中的最后一项时,我想显示国家/地区的另一个输入选项。

目前我在 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 outsideOfUs var 放在了 pickerView didSelectRow 中。不确定这是不是我应该放的地方。

您正在使用:

selectedRow(inComponent: 52)

因此,毫无疑问,它会崩溃并显示如下错误消息:

Terminating app due to uncaught exception 'NSRangeException', reason: '*** -[__NSArrayM objectAtIndex:]: index 52 beyond bounds [0 .. 0]'

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

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

let outsideOfUS = stateOptionsList[52]

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

guard let outsideOfUS = stateOptionsList.last else { return }