我有UITableView
动态原型单元格,其中包含一些标签和UIPickerView
。
我将一个数组定义为UIPickerView
的默认源,我还添加了所需的方法:
var dataPicker =
[
"Option 1", "Option 2", "Option 3"
]
/*
// MARK: - UIPickerView methods
*/
func numberOfComponents(in pickerView: UIPickerView) -> Int
{
print("JobVC > pickerView > numberOfComponents")
//In this case this is always 1
return pvComponents
}
func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int
{
print("JobVC > pickerView > numberOfRowsInComponent")
return dataPicker.count
}
func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String?
{
print("JobVC > pickerView > titleForRow")
return dataPicker[row]
}
UIPickerView
数据会根据我选择的行而改变,因此我决定在dataPicker
函数中设置didSelectRowAt
数组数据:
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath)
{
print("JobVC > tableView > didSelectRowAtIndexPath")
if(indexPath.row == 0)
{
dataPicker =
[
"Option 1", "Option 2", "Option 3", "Option 4"
]
selectedCell = 0
}
else if(indexPath.row == 1)
{
dataPicker = []
let currentYear = Calendar.current.component(.year, from: Date())
for year in 1970...currentYear
{
dataPicker.append( String(year) )
}
selectedCell = 1
}
else if(indexPath.row == 2)
{
dataPicker =
[
"Option 1", "Option 2", "Option 3", "Option 4", "Option 5", "Option 6"
]
selectedCell = 2
}
else if(indexPath.row == 3)
{
dataPicker =
[
"Option 1", "Option 2", "Option 3"
]
selectedCell = 3
}
else if(indexPath.row == 4)
{
dataPicker =
[
"Option 1", "Option 2"
]
selectedCell = 4
}
else if(indexPath.row == 5)
{
dataPicker =
[
"Option 1", "Option 2", "Option 3"
]
selectedCell = 5
}
//Expandable cell stuff
guard let cell = tableView.cellForRow(at: indexPath) as? JobExpandableCell
else { return }
switch cell.isExpanded
{
case true:
self.expandedRows.remove(indexPath.row)
case false:
self.expandedRows.insert(indexPath.row)
}
cell.isExpanded = !cell.isExpanded
self.tblJob.beginUpdates()
self.tblJob.endUpdates()
}
现在,我在另外3个案例中做了同样的事情,每次都出去了。但这次行为有点不同。
如果我开始从第一个(indexPath.row = 0)
开始选择行,则单元格会展开,UIPickerView
会显示每行所需的数据集。
但是,如果我开始随机选择行或从最后一行(indexPath.row = 5)
开始,则在我选择第一行或第二行之前,它不会显示任何选择器视图。从那时起,它开始在每个单元格上显示它。
这只在我第一次访问该屏幕时发生(ViewController
)。如果我从底部重新开始,在我解雇VC或退出应用程序之前没有问题。
我检查了dataPicker[]
数组,如果我每次点击行都填写了所需的数据,并且没有错误/警告。
事实上,这个VC和其他相同代码工作正常的其他区别的唯一区别是,在这种情况下,我有6行,而在所有其他的我有2或3行。
有什么想法吗?我现在已经尝试了一段时间没有任何运气来解决这个问题。不幸的是,我不太确定在这种情况下要搜索什么。
LE:我想我弄清楚为什么会这样。 UITableView
仅为可见区域加载单元格,而不是所有可用单元格,因为它旨在显示大量数据,这将导致内存问题。用户滚动时会加载单元格数据。
然而,在这种情况下,我假设所有细胞都不可见,因为它们是可扩展细胞,每个细胞都有235px。这意味着只加载了2个单元,因为只能同时显示2个单元。 问题是我无法滚动,因为一次只扩展一个单元格。
有什么建议吗?