UIPickerView.selectRow 滚动导致崩溃
UIPickerView.selectRow scrolling make crash
我有 3 个 UIPickerView,每个都有不同的值:
let pickerContext = ["Aucun","@office","@computer","@home","@meeting","@read","@achat","@call"]
let pickerStatus = ["LATE","IN-PROCESS","COMPLETED","NOT-STARTED"]
let pickerField = ["INBOX","TODO","WAITING","MAYBE","NOTE"]
func numberOfComponentsInPickerView(pickerView: UIPickerView) -> Int {
return 1
}
func pickerView(pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
if(pickerView.isEqual(ContextPickerView)){
return pickerContext.count
}
if(pickerView.isEqual(StatusPickerView)){
return pickerStatus.count
}
if(pickerView.isEqual(FieldPickerView)){
return pickerField.count
}
return 0
}
func pickerView(pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String! {
if(pickerView.isEqual(ContextPickerView)){
if contextText != ""{
println(contextText)
for (index, context) in enumerate(pickerContext)
{
if context == contextText
{
ContextPickerView.selectRow(index, inComponent: 0, animated: false)
}
}
}
return pickerContext[row]
}
if(pickerView.isEqual(StatusPickerView)){
if statusText != ""{
println(statusText)
for (index, status) in enumerate(pickerStatus)
{
if status == statusText
{
StatusPickerView.selectRow(index, inComponent: 0, animated: false)
}
}
}
return pickerStatus[row]
}
if(pickerView.isEqual(FieldPickerView)){
if fieldText != ""{
println(fieldText)
for (index, field) in enumerate(pickerField)
{
if field == fieldText
{
FieldPickerView.selectRow(index, inComponent: 0, animated: false)
}
}
}
return pickerField[row]
}
return ""
}
func pickerView(pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
if(pickerView.isEqual(ContextPickerView)){
contextText = pickerContext[row]
}
if(pickerView.isEqual(StatusPickerView)){
statusText = pickerStatus[row]
}
if(pickerView.isEqual(FieldPickerView)){
fieldText = pickerField[row]
}
}
UIPickerViews 填充得很好,这取决于 segue 从一个 ViewController 传递给带有 PickerViews 的值,pickerViews 的光标在适当的位置,一切正常但是..当我尝试交换任何 PickerView 的光标时,应用程序在相关 ******PickerView.selectRow(index, inComponent: 0, animated: false)
上崩溃。页面收费后,我无法更改任何光标。
我认为是因为如果 if context == contextText
确实,如果我将 contextText
、statusText
或 fieldText
设置为 "",游标将设置为第一个值, 但我可以根据需要更改它们。
有什么办法可以避免这些崩溃吗?
谢谢
不尝试在 pickerview:titleForRow... 方法中使用 PickerView.selectRow 怎么样?当Picker视图使行准备好显示时,该方法正在调用。
在使用数据源设置选择器视图后的某处,只需遍历数据并找到 contentText/statusText/fieldText 的索引,然后(如果找到)调用 ContextPickerView/StatusPickerView/FieldPickerView.selectRow.
我有 3 个 UIPickerView,每个都有不同的值:
let pickerContext = ["Aucun","@office","@computer","@home","@meeting","@read","@achat","@call"]
let pickerStatus = ["LATE","IN-PROCESS","COMPLETED","NOT-STARTED"]
let pickerField = ["INBOX","TODO","WAITING","MAYBE","NOTE"]
func numberOfComponentsInPickerView(pickerView: UIPickerView) -> Int {
return 1
}
func pickerView(pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
if(pickerView.isEqual(ContextPickerView)){
return pickerContext.count
}
if(pickerView.isEqual(StatusPickerView)){
return pickerStatus.count
}
if(pickerView.isEqual(FieldPickerView)){
return pickerField.count
}
return 0
}
func pickerView(pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String! {
if(pickerView.isEqual(ContextPickerView)){
if contextText != ""{
println(contextText)
for (index, context) in enumerate(pickerContext)
{
if context == contextText
{
ContextPickerView.selectRow(index, inComponent: 0, animated: false)
}
}
}
return pickerContext[row]
}
if(pickerView.isEqual(StatusPickerView)){
if statusText != ""{
println(statusText)
for (index, status) in enumerate(pickerStatus)
{
if status == statusText
{
StatusPickerView.selectRow(index, inComponent: 0, animated: false)
}
}
}
return pickerStatus[row]
}
if(pickerView.isEqual(FieldPickerView)){
if fieldText != ""{
println(fieldText)
for (index, field) in enumerate(pickerField)
{
if field == fieldText
{
FieldPickerView.selectRow(index, inComponent: 0, animated: false)
}
}
}
return pickerField[row]
}
return ""
}
func pickerView(pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
if(pickerView.isEqual(ContextPickerView)){
contextText = pickerContext[row]
}
if(pickerView.isEqual(StatusPickerView)){
statusText = pickerStatus[row]
}
if(pickerView.isEqual(FieldPickerView)){
fieldText = pickerField[row]
}
}
UIPickerViews 填充得很好,这取决于 segue 从一个 ViewController 传递给带有 PickerViews 的值,pickerViews 的光标在适当的位置,一切正常但是..当我尝试交换任何 PickerView 的光标时,应用程序在相关 ******PickerView.selectRow(index, inComponent: 0, animated: false)
上崩溃。页面收费后,我无法更改任何光标。
我认为是因为如果 if context == contextText
确实,如果我将 contextText
、statusText
或 fieldText
设置为 "",游标将设置为第一个值, 但我可以根据需要更改它们。
有什么办法可以避免这些崩溃吗?
谢谢
不尝试在 pickerview:titleForRow... 方法中使用 PickerView.selectRow 怎么样?当Picker视图使行准备好显示时,该方法正在调用。
在使用数据源设置选择器视图后的某处,只需遍历数据并找到 contentText/statusText/fieldText 的索引,然后(如果找到)调用 ContextPickerView/StatusPickerView/FieldPickerView.selectRow.