为UITableViewCell指定Segue

时间:2019-05-12 00:59:29

标签: ios swift uitableview

在制定布局规划时,我暂时将一些项目放入菜单中,但是在弄清楚如何使用indexPath.row -DidSelectRow时遇到了麻烦-

我有以下代码:

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 :(得分:0)

由于您尚未设置委托,因此不会打印出indexPath。仅实现方法是不够的,tableView需要知道谁将实现委托方法。

委托和数据源之间是有区别的。

tableView.dataSource将帮助您获取numberofSections,numberofRowsInASection和TableCell对象

tableView.delegate将帮助您管理选择和取消选择。

    override func viewDidLoad() {
        super.viewDidLoad()
        videos = createArray()
        self.tableView.rowHeight = 65.0
        tableView.dataSource = self
//Add this
         tableView.delegate = self
    }

答案 1 :(得分:0)

您只需要在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)
        }
    }

希望这对您有所帮助。