如何快速处理第二个表格视图在第一表格视图单元格下面的行的点击?

时间:2019-01-23 10:36:12

标签: ios swift uitableview

第一个表格视图图像1->

enter image description here

第二个表格视图(嵌套在第一个表格视图中)图像2->

enter image description here

嵌套表视图的第一行在点击后可以正常工作,但其他行却无法工作图像3->

enter image description here

当我点击第一tableView的第一行时,它可以正常工作;当我点击第二tableView的第一行时,它也可以工作。

问题是当我点击第二张表视图的第二行时,它不起作用。

就像第一张表视图的第二行被录音一样,然后在第二张表中查看。点击时,只有第二行在工作。

class CartVC: UIViewController, UITableViewDelegate, UITableViewDataSource {


    var selectedIndex = -1  
    var nestedSelectedIndex = -1 

    var nestedTableViewCellDataTitle : [String] = ["ABC123", "DEF456","GHI890","JKL145"]
    @IBOutlet weak var tableView: UITableView!


    override func viewDidLoad() {
        super.viewDidLoad()


    }


    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        if tableView.tag == 1{
            return 5
        }
        else{
            return nestedTableViewCellDataTitle.count
        }

    }


    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        if tableView.tag == 1{
            let cell = tableView.dequeueReusableCell(withIdentifier: "CartViewCell", for: indexPath) as! CartTableViewCell
            cell.nestedTableView.delegate = self
            cell.nestedTableView.dataSource = self

            return cell
        }else {
             let cell = tableView.dequeueReusableCell(withIdentifier: "NestedCartTableCell", for: indexPath) as! NestedCartTableCell
            cell.productTitle.text = nestedTableViewCellDataTitle[indexPath.row]

            return cell
        }

    }


    //Hide and Open when we tap on table view
    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        if tableView.tag == 1{
            if selectedIndex == indexPath.row{
                selectedIndex = -1
            }else{
                selectedIndex = indexPath.row
            }
            self.tableView.beginUpdates()

            self.tableView.reloadRows(at: [indexPath], with: UITableView.RowAnimation.automatic)

            self.tableView.endUpdates()
        }else if tableView.tag == 2{
            if nestedSelectedIndex == indexPath.row{
                nestedSelectedIndex = -1
            }else{
                nestedSelectedIndex = indexPath.row
            }
            self.tableView.beginUpdates()
            self.tableView.reloadRows(at: [indexPath], with: UITableView.RowAnimation.automatic)

            self.tableView.endUpdates()
        }

    }

    //Specify hight for both view
    func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
        if tableView.tag == 1{
            if selectedIndex == indexPath.row{
                return 500

            }else{
                return 37
            }
        }else{
            if nestedSelectedIndex == indexPath.row{
                return 410
            }else{
                return 106
            }
        }

    }

1 个答案:

答案 0 :(得分:0)

  

创建UITableView类型的新变量。存储嵌套的tableView表格的第一个TableView单元格,然后在嵌套的tableView的行上点击时重新加载此表。

CartVC类:UIViewController,UITableViewDelegate,UITableViewDataSource {

var selectedIndex = -1  
var nestedSelectedIndex = -1 

var nestedTableViewCellDataTitle : [String] = ["ABC123", "DEF456","GHI890","JKL145"]


var newTableView = UITableView() **//This is the key (Solution Line 1)**



 var requestForMatchineStyleImage : [String] =["BAGS","BANGLES","BELTS","BRACELETS","CUFFLINKS","EARRINGS","FINGER-RINGS","HEADBANDS","KEYRINGS","NECKLACES","STRINGS"]


@IBOutlet weak var tableView: UITableView!


override func viewDidLoad() {
    super.viewDidLoad()


}


func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    if tableView.tag == 1{
        return 5
    }
    else{
        return nestedTableViewCellDataTitle.count
    }

}


func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    if tableView.tag == 1{
        let cell = tableView.dequeueReusableCell(withIdentifier: "CartViewCell", for: indexPath) as! CartTableViewCell
        cell.nestedTableView.delegate = self
        cell.nestedTableView.dataSource = self

        newTableView = cell.nestedTableView //**This is the key (Solution Line 2)**

        return cell
    }else {
         let cell = tableView.dequeueReusableCell(withIdentifier: "NestedCartTableCell", for: indexPath) as! NestedCartTableCell
        cell.productTitle.text = nestedTableViewCellDataTitle[indexPath.row]

        return cell
    }

}


//Hide and Open when we tap on table view
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {

    //let cell = tableView.cellForRow(at: indexPath)


    if tableView.tag == 1{
        if selectedIndex == indexPath.row{
            selectedIndex = -1
        }else{
            selectedIndex = indexPath.row
        }
        self.tableView.beginUpdates()

        self.tableView.reloadRows(at: [indexPath], with: UITableView.RowAnimation.automatic)

        self.tableView.endUpdates()
    }else if tableView.tag == 2{
        if nestedSelectedIndex == indexPath.row{
            nestedSelectedIndex = -1
        }else{
            nestedSelectedIndex = indexPath.row
        }
        self.newTableView.beginUpdates() **//This is the key (Solution Line 3)**
        self.newTableView.reloadRows(at: [indexPath], with: UITableView.RowAnimation.automatic) **//This is the key (Solution Line 4)**

        self.newTableView.endUpdates()**//This is the key (Solution Line 5)**
    }

}



//Specify hight for both view
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
    if tableView.tag == 1{
        if selectedIndex == indexPath.row{
            return 500

        }else{
            return 37
        }
    }else{
        if nestedSelectedIndex == indexPath.row{
            return 430
        }else{
            return 106
        }
    }

}


@IBAction func backArrowBtnAction(_ sender: Any) {
    dismiss(animated: true
        , completion: nil)
}


@IBAction func backTextBtnAction(_ sender: Any) {
    dismiss(animated: true, completion: nil)
}



static func storyboardInstance() -> CartVC? {
    let storyboard = UIStoryboard(name: "CartSt", bundle: nil)
    return storyboard.instantiateInitialViewController() as? CartVC
}



override var prefersStatusBarHidden: Bool {
    return true
}

}

扩展名CartVC:UICollectionViewDelegate,UICollectionViewDataSource {     func collectionView(_ collectionView:UICollectionView,numberOfItemsInSection部分:Int)-> Int {         返回requestForMatchineStyleImage.count     }

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "CollectionViewCellOfRFQ", for: indexPath) as! RFQNestedCollectionViewCell

    return cell
}

}