Как сделать push-переход, когда выбран определенный UITableViewCell - PullRequest
0 голосов
/ 24 марта 2019

Я работаю над своим первым приложением для iOS и новым студентом, который будет стремительным.

Все работает, но у меня возникают проблемы с выяснением, как перейти от определенной ячейки к контроллеру третьего представления. У меня есть IOS UITableView с тремя секциями и всего (44) ячеек. Все ячейки при нажатии переходят на одну DetailVC под названием: showProductDetai, что нормально. Проблема, с которой я сталкиваюсь, заключается в том, что мне нужно иметь только (1) определенную ячейку в строке 0 раздела 5 в UITableView, чтобы перейти к ее собственной ViewController, в которой я назвал: second view controller вместо обычной showProductDetail ВК. Есть ли разумный способ заставить определенную ячейку в секции 5 строки 5 tableView перейти на второй контроллер вида, когда он выбран?

Вот мой текущий код, который работает. Как мне написать код для внесения изменений?

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "ProductCell", for: indexPath) as! ProductTableViewCell

    // Configure the cell...
    let productLine = productLines[indexPath.section]
    let products = productLine.products
    let product = products[indexPath.row]

    cell.product = product

    return cell
}

override func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? {

    let productLine = productLines[section]

    return productLine.name
}

// Mark: UITableViewDelegate

var selectedProduct: Product?

override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath)
{
    let productLine = productLines[indexPath.section]
    let product = productLine.products[indexPath.row]
    selectedProduct = product
    performSegue(withIdentifier: "ShowProductDetail", sender: nil)


}

// Mark: - Navigation

override func prepare(for segue: UIStoryboardSegue, sender: Any?)
{
    if segue.identifier == "ShowProductDetail" {
        let DetailVC = segue.destination as! DetailViewController
        DetailVC.product = selectedProduct

    }
}

Ответы [ 2 ]

1 голос
/ 24 марта 2019

видите, что я здесь сделал?Вы можете использовать параметр indexPath, чтобы получить раздел и строку, к которой прикоснулся пользователь, а затем настроить программный переход.

override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath)
{
    if ((indexPath.section == 0) && (indexPath.row == 5)) {
        performSegue(withIdentifier: "GoToSecondViewController", sender: nil)
     } else {
        let productLine = productLines[indexPath.section]
        let product = productLine.products[indexPath.row]
        selectedProduct = product
        performSegue(withIdentifier: "ShowProductDetail", sender: nil)
    }
}
0 голосов
/ 24 марта 2019

Введите код перехода для нужного раздела и строки:

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

    if indexPath.section == 0 && indexPath.row == 5 {
        //Perform Segue
    } else {
        //Rest of the functionality
    }
}

Убедитесь, что вы подключили правильные Sugues и дали правильные идентификаторы в раскадровке.

Вам не нужно писать prepare Метод Segue

...