我有一些索引值每次都会更改。所以在我的vc中:
lazy var List: [[String: Any]]? = FetchInfoUtil.sharedInstance.List
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "MainTableViewCell", for: indexPath) as! MainTableViewCell
print(indexPath.row)
switch CurrentIndexVal {
case 1:
cell.Info = List?[0];
case 2:
cell.Info = List?[1];
case 3:
cell.Info = List?[2];
case 4:
cell.Info = List?[3];
case 5:
cell.Info = List?[4];
case 6:
cell.Info = List?[5];
default:
break;
}
if let gList = cell.Info?["list"] as? [[String: Any]] {
SelectedSkill = gList
let gInfo = gList[indexPath.item]
cell.Name.text = gInfo["title"] as? String ?? "NA"
}
return cell
}
这是一个问题:
func tableView(_ tableView: UITableView, section: Int) -> Int {
let indexPath = IndexPath.init(row: 0, section: 0)
let cell = tableView.cellForRow(at: indexPath) as? MainTableViewCell
guard let gList = cell?.Info?["list"] as? [[String: Any]] else {
return 0
}
return gList.count;
}
在这里,我每次都崩溃:let cell = tableView.cellForRow(at: indexPath) as? MainTableViewCell
我应该将我的currentIndexVal
传递到该行或我在这里做什么。任何帮助都会对我有所帮助。
答案 0 :(得分:1)
您在numberOfRows
方法中使用了错误的方法。
使用此方法numberOfRows
后,您的单元格将加载。当前单元格没有列表。因此,在此方法中,首先获取listObject,然后返回其计数。
尝试使用下面的方法。
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
guard let gList = List?[CurrentIndexVal]["list"] as? [[String: Any]] else {
return 0
}
return gList.count;
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "MainTableViewCell", for: indexPath) as! MainTableViewCell
print(indexPath.row)
let dictionaryObject = List?[CurrentIndexVal]
if let gList = dictionaryObject?["list"] as? [[String: Any]] {
SelectedSkill = gList
let gInfo = gList[indexPath.item]
cell.Name.text = gInfo["title"] as? String ?? "NA"
}
return cell
}
只要您单击菜单按钮并在更新CurrentIndexVal
中的值之后立即更新CurrentIndexVal
,就只需调用。
self.tableView.reloadData()
看看魔术。