swift - 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 outsideOfUs
var 放在 pickerView 中didSelectRow
。不知道这是否是我应该放这个的地方。
解决方案
您正在使用:
selectedRow(inComponent: 52)
因此,毫无疑问,它会因以下错误消息而崩溃:
由于未捕获的异常“NSRangeException”而终止应用程序,原因:“*** -[__NSArrayM objectAtIndex:]: index 52 beyond bounds [0 .. 0]”
当它崩溃时,它通常会提供这样的有用消息。此消息告诉我们选择器只有一个组件。没有组件编号 52。
因此,只需直接从模型对象中获取项目:
let outsideOfUS = stateOptionsList[52]
或者,如果您稍后添加其他美国领土(例如波多黎各),则不必更改此设置,只需从列表中获取最后一个,例如
guard let outsideOfUS = stateOptionsList.last else { return }
推荐阅读
- javascript - WebdriverIO browser.element 无法在 DOM 中定位现有元素
- java - Tomcat 中的活动会话数
- c# - 页面重新加载几次后退出
- reactjs - 在反应中从状态对象中删除项目(奇怪的渲染)
- html - 如何通过 Telegram 创建链接以联系特定电话号码?
- c# - 从 SQL 服务器读取数据到 UWP - 错误:System.Data.SqlClient.SqlException
- php - Codeigniter 会话交换 - 用户之间混合
- angular - 从服务中获取当前元素(循环 Hook 问题)
- c++ - 如何确定任何语言的 UTF-8 字符串的 std::isgraph?
- jmeter - 字符串替换功能问题