当我滚动tableView时,如何知道哪个单元格触及绿色区域

时间:2017-12-02 17:03:03

标签: ios uitableview uiscrollview

The Screen In My Prototype

我的问题基于The image in the link 。由于我的声誉不够,我无法在此发布任何图片

我们假设图像中的绿区固定。< 而且,我的要求是当a cell包含GA时,that cell's audioPlayer会在单元格中说出该单词,例如 AirPod

,您可以将我的要求视为When a cell contains the GA, the text of that cell's label changes to "Touch the Green"

我的问题是当我滚动tableView时,如何让which one(Cell)包含GA? 但我无法找到方法(有关该单元格的某些位置/索引信息

任何人都可以帮助我吗? ObjectiveC解决方案没问题,Swift解决方案对我来说更好,非常感谢

3 个答案:

答案 0 :(得分:2)

在此代码中,我使用<button type="submit" class="btn btn-default" id="addBtn" onclick="addfunction();">Add</button> 作为 var title = document.getElementById("TitleInput").value; var ID = firebase.database().ref().child('emp').push().key; //upload pic var filename = selectionfile; filename = newsID; var storageRef = firebase.storage().ref(filename); var uploadTask = storageRef.put(selectionfile); if (user != null) { userid = user.uid; var Dataa = { ID: ID, title: title, }; var updates = {}; updates['/emp/' + ID] = Dataa; var returnUpdate = firebase.database().ref().update(updates); if (returnUpdate) { var mess = document.getElementById("confirm_mess"); mess.setAttribute("class", "bg-success h4"); mess.setAttribute("style", "padding: 1%; margin: 1% 9% 0 35%"); mess.innerHTML = "done"; } } 的中心。来自$(function () { $("#title_span").hide(); var error_title = false; $("#TitleInput").focusout(function () { Title_validation(); }); function Title_validation() { var title = $("#TitleInput").val(); if (title == "") { $("#title_span").html("wrong input"); $("#title_span").show(); error_title = true; } else { $("#title_span").hide(); } } $("#my_form").submit(function () { error_title = false; Title_validation(); if (error_title == false) { return true; } else { return false; } }); 答案的一些修改。

setTimeout

查找以下屏幕截图:

enter image description here

答案 1 :(得分:1)

override func viewDidAppear(_ animated: Bool) {
    super.viewDidAppear(animated)

    // We check cells here to set the state of whether it contains the green or not before the scrolling
    checkCells()
}

func scrollViewDidScroll(_ scrollView: UIScrollView) {
    // And we are continuously checking cells while scrolling
    checkCells()
}

func checkCells() {
    tableView.visibleCells.forEach { cell in
        if let indexPath = tableView.indexPath(for: cell) {
            let rect = tableView.rectForRow(at: indexPath)
            // This is the rect in your VC's coordinate system (and not the table view's one)
            let convertedRect = self.view.convert(rect, from: tableView)

            if convertedRect.contains(greenArea.frame) {
                cell.textLabel?.text = "Touch the Green"
            } else {
                cell.textLabel?.text = "Does not touch the Green"
            }
        }
    }
}

答案 2 :(得分:0)

如下:

func scrollViewDidScroll(_ scrollView: UIScrollView) {
    [0, 1, 2].forEach {
        let rect = tableView.rectForRow(at: IndexPath(row: $0, section: 0))
        if rect.contain(GAView.frame) {
            // play sound here
        }
    }
}