在我的第一个vc(ViewController)中,我具有操作为performSegue
的按钮。在覆盖功能prepare(for segue:)
中,我想将数据发送到另一个视图控制器。
这是我的代码:
if segue.identifier == "nextVC" {
let data1 = ["TITLE", "TITLE2"]
let data2 = ["DESCRIPTION", "DESCRIPTION 2", "DESCRIPTION 3"]
let destination = segue.destination as! DestinationController
destination.cellString1 = data1
destination.cellString2 = data2
destination.array = array
在第二个vc(DestinationController)中,我具有变量cellString1
,cellString2
和array
,如下所示:
var array: [String] = []
var cellString1: [String] = []
var cellString2: [String] = []
在数组中,我发送到第一个vc中的tableView单元格的第二个vc id,如下所示:
["0", "1", "1", "0", "1"]
在第二个vc中,我也拥有tableView以及代码(在tableview(cellForRowAt :)中),如下所示:
if array[indexPath.row] == "0" {
cell.textLabel?.text = cellString1[indexPath.row]
cell.textLabel?.textColor = UIColor.black
cell.textLabel?.font = UIFont.boldSystemFont(ofSize: 16)
cell.backgroundColor = UIColor.black
return cell
} else if array[indexPath.row] == "1" {
cell2.textLabel?.text = cellString2[indexPath.row]
cell2.textLabel?.textColor = UIColor.gray
cell2.textLabel?.font = UIFont.systemFont(ofSize: 12)
cell2.backgroundColor = UIColor.red
return cell2
我要检测单元格中的数组是否具有值(0或1),然后单元格的标签从cellString1
或cellString2
中取值并显示此标签的文本。当我删除单元格textLabel配置时,单元格背景的颜色是正确的(black, red, red, black, red)
,但是在完整代码中,第(Index out of range)
行有错误cell.textLabel?.text = cellString1[indexPath.row]
。
可以解决这个问题吗?
答案 0 :(得分:0)
这应该是:
destination.cellString1 = data1
destination.cellString2 = data2
destination.array = array
let destination = segue.destination as! DestinationController
您应该在destination.cellString1 = data1
,destination.cellString2 = data2
和destination.array = array
之后执行segue。其他这些属性将不会分配。
答案 1 :(得分:0)
您获得了2个标题,3个描述和5个色标。如果要将多个数组用作数据源,则必须确保项目数始终相同。
例如,如果您在array.count
中返回numberOfRows
,则cellForRow
被调用5次。但是indexPath.row > 1
中cellString1
和indexPath.row > 2
中cellString2
处没有项目。这会导致超出范围的异常。
基本上,强烈建议您不要使用多个数组作为数据源。不要这样做。
请改用自定义结构,而不是使用“ Bool
”来代替“ 0”和“ 1”字符串
struct Item {
var title : String
var description : String
var colorFlag : Bool
}
然后使用适当的数据创建Item
实例,并传递一个数组。
答案 2 :(得分:0)
这是可以预期的,因为3个数组的计数不同,并且确保indexPath将超过cellString1
,因为它包含2个项目,并且数组的第二个“ 0”位于索引3中,该计数超过{{1} }