如何设置段控件以更改表视图单元格中的集合单元项?

时间:2017-11-10 04:35:23

标签: swift uitableview uicollectionviewcell uisegmentedcontrol

我在表格视图单元格中创建了一个集合视图,并在表格视图的导航栏上添加了一个段控件。当分段出口和操作在表视图控制器上时,如何更改收集单元项目?

我在表视图控制器上尝试了这个但是得到了这个错误: 在第2147483647节之前的项目数量请求,当集合视图中只有1个部分时

SparkContext

表视图单元控制器:

@IBAction func mySegAction(_ sender: UISegmentedControl) {
    switch mySeg.selectedSegmentIndex
    {
    case 0:
        print("0")
    case 1:
        print("1")
        let indexPath = IndexPath()
        let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "CollectionViewCell", for: indexPath) as! CategoryCollectionViewCell

        cell.cateLabel.text! = nameArray2[indexPath.row]
    default:
        break;
    }
}

我希望在更改func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "CollectionViewCell", for: indexPath) as! CategoryCollectionViewCell cell.cateLabel.text! = nameArray[indexPath.row] // I tried this code but fail if AddViewController().mySeg?.selectedSegmentIndex == 1 { cell.cateLabel.text! = nameArray2[indexPath.row] } return cell } 后将cateLabel.text! = nameArray[indexPath.row]更改为nameArray2[indexPath.row],如何做到这一点?

1 个答案:

答案 0 :(得分:0)

在操作上调用tableView.reloadData(),在cellForRowAt上调用collectionView.reloadData()

@IBAction func mySegAction(_ sender: UISegmentedControl) {
    switch mySeg.selectedSegmentIndex{
        case 0:
            segment = 0
            UserDefaults.standard.setValue(segment, forKey:"segment")
            UserDefaults.standard.synchronize()
        case 1:
            segment = 1
            UserDefaults.standard.setValue(segment, forKey:"segment")
            UserDefaults.standard.synchronize()
        default:
            break;
    }
    self.tableView.reloadData()
}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

    if indexPath.row == 1{
        let cell1 = tableView.dequeueReusableCell(withIdentifier: "AddViewCell2", for: indexPath)
        return cell1
    }else if indexPath.row == 2{
        let cell2 = tableView.dequeueReusableCell(withIdentifier: "AddViewCell3", for: indexPath)
        return cell2
    }else if indexPath.row == 3{
        let cell3 = tableView.dequeueReusableCell(withIdentifier: "AddViewCell4", for: indexPath)
        return cell3
    }else if indexPath.row == 4{
        switch segment {
        case 0:
            let cell4 = tableView.dequeueReusableCell(withIdentifier: "AddViewCell5", for: indexPath) as! AddViewCell
            cell4.collectionView.reloadData()
            return cell4
        case 1:
            let cell4 = tableView.dequeueReusableCell(withIdentifier: "AddViewCell5", for: indexPath) as! AddViewCell
            cell4.collectionView.reloadData()
            return cell4
        default:
            break
        }
    }

    let cell = tableView.dequeueReusableCell(withIdentifier: "AddViewCell1", for: indexPath)
    return cell


}

在表格视图单元格类中:

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {

    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "CollectionViewCell", for: indexPath) as! CategoryCollectionViewCell
    let segment = UserDefaults().value(forKey: "segment") as! Int
    //print("segment here")
    //print(segment)
    switch segment {
    case 0:
        cell.cateLabel.text! = nameArray[indexPath.row]
        cell.cateImg.image = imageName[indexPath.row]
    case 1:
        cell.cateLabel.text! = nameArray2[indexPath.row]
        cell.cateImg.image = imageName[indexPath.row]
    default:
        break;
    }
    return cell
}