Указание Segue для UITableViewCell - PullRequest
0 голосов
/ 12 мая 2019

У меня есть коллекция элементов, которые я в настоящее время помещаю в меню, пока я работаю над планированием макета, но у меня возникают проблемы с выяснением, как работать с DidSelectRow с indexPath.row -

У меня есть следующий код:

import UIKit

class DispatchViewController: UIViewController {

    @IBOutlet weak var tableView: UITableView!

    var videos: [DispatchMenuItem] = []


    override func viewDidLoad() {
        super.viewDidLoad()
        videos = createArray()
        self.tableView.rowHeight = 65.0
        tableView.dataSource = self

    }


    func createArray() -> [DispatchMenuItem] {

        let video1 = DispatchMenuItem(image: #imageLiteral(resourceName: "truckUnloadIcon"), title: "Open Manifests")
        let video2 = DispatchMenuItem(image: #imageLiteral(resourceName: "podIcon"), title: "Customer Pickup")
        return [video1, video2]
    }
}


extension DispatchViewController: UITableViewDataSource, UITableViewDelegate {

    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return videos.count
    }


    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let video = videos[indexPath.row]
        let cell = tableView.dequeueReusableCell(withIdentifier: "DispatchMenuItemCell") as! DispatchMenuItemCell
        cell.setVideo(video: video)

        return cell
    }

    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        print(indexPath.row)
        print(indexPath)
        if indexPath.row == 1{
            self.performSegue(withIdentifier: "goToOpenManifests", sender: nil)
        }else if indexPath.row == 2{
            self.performSegue(withIdentifier: "goToCustomerPickupForm", sender: nil)
        }
    }
}

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

Есть какие-нибудь предложения? Я обычно делал это только с помощью UITableViewController и никогда не сталкивался с этой проблемой, но где-то здесь я застреваю.

Ответы [ 2 ]

0 голосов
/ 12 мая 2019

Вам просто нужно добавить ниже первой строки кода в методе загрузки viewDid и улучшить ваш код, как показано ниже.

tableView.delegate = self

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        print(indexPath.row)
        print(indexPath)
        if indexPath.row == 0 {
            self.performSegue(withIdentifier: "goToOpenManifests", sender: nil)
        }else if indexPath.row == 1 {
            self.performSegue(withIdentifier: "goToCustomerPickupForm", sender: nil)
        }
    }
0 голосов
/ 12 мая 2019

Он не будет распечатывать indexPath, поскольку вы не установили делегат.Реализация только метода недостаточна, tableView необходимо знать, кто будет реализовывать методы делегата.

Существует разница между делегатом и источником данных.

tableView.dataSource поможет вамчтобы получить число разделов, число рядов_информаций, объект TableCell

tableView.delegate поможет вам управлять выбором и отменой выбора.

    override func viewDidLoad() {
        super.viewDidLoad()
        videos = createArray()
        self.tableView.rowHeight = 65.0
        tableView.dataSource = self
//Add this
         tableView.delegate = self
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...