Как создать кликабельные ячейки в UITableView (Swift) - PullRequest
0 голосов
/ 25 июня 2019

Я работаю над личным проектом и хочу, чтобы ячейки в моем UITableView были активными, чтобы при нажатии они переходили к следующему представлению и передавали информацию из своей ячейки вместе с ней при нажатии.

Я пытался просмотреть другие руководства и видео, демонстрирующие, как это сделать, однако все они устарели.То, что показалось мне обещающим, но, в конце концов, не работало, было связано с определенной функцией didSelectRowAt, но я не мог заставить ее работать.

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath) as!
    CandidateTableViewCell
    if (indexPath.row >= candidateCells.count){
        print("???")
        candidateCells.append(cell)
        print("Strange error")
    }
    tableView.delegate = self
    cell.CandidateName?.text = candidatesNames[indexPath.item]
    cell.CandidatePos?.text = candidatesPositions[indexPath.item]
    //cell.candidateButton.tag = indexPath.row
    cell.CandidateName.sizeToFit()
    cell.CandidatePos.sizeToFit()
    print(candidateCells)
    print(indexPath.row)
    print(candidateCells.count)
    print(indexPath.row >= candidateCells.count)
    candidateCells[indexPath.item] = cell
    return cell

}

override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    performSegue(withIdentifier: "Segue", sender: Any?.self)
}

Чем я былОжидалось, что произойдет, что ячейка станет кликабельной, и когда она будет нажата, она отправит меня на следующую страницу приложения, однако при нажатии ничего не произойдет.Ячейка не выделяется, и переход не происходит.Большое спасибо за любые предложения!

1 Ответ

0 голосов
/ 25 июня 2019

Если вы хотите передать информацию в следующую ячейку, я обычно избегаю использования Segue и настраиваю ViewController с идентификатором повторного использования.Делая это, вы можете передавать информацию проще.Например,

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {

        let vc = self.storyboard?.instantiateViewController(withIdentifier: "YOURRESUEIDENTIFIER") as! YOURVIEWCONTROLLERCLASS
        vc.infoToPass = cellData[indexPath.row]
        DispatchQueue.main.async {
            self.navigationController?.pushViewController(vc, animated: true)
        }

    }

Другой вариант - реализовать метод shouldPerformSegueWithIdentifier() для правильной установки данных.Вы щелкнете по своей ячейке, которая вызывает функцию performSegue, которая вызовет shouldPerformSegueWithIdentifier, где вы можете установить данные и вернуть true

...