didSelectRowAt方法未被调用(swift 3)

时间:2017-02-21 12:48:54

标签: swift3

我以编程方式创建了一个简单的TableView示例。

import UIKit

class ViewController: UIViewController
{
    var solarObjects : UITableView! = nil
    var dataSourceTable:DemoTable?

    override func viewDidLoad()
    {
        super.viewDidLoad()

        solarObjects = UITableView(frame: CGRect(x: 0, y: 0, width: view.frame.width, height: view.frame.height * 0.9))
        solarObjects.allowsSelection = true
        solarObjects.backgroundColor = UIColor.white
        self.dataSourceTable = DemoTable()
        self.solarObjects.dataSource = self.dataSourceTable

        view.addSubview(solarObjects)
    }
    override func didReceiveMemoryWarning() 
    {
        super.didReceiveMemoryWarning()
    }
}

solarObject的数据源位于单独的文件(DemoTable.swift)

import Foundation
import UIKit

class DemoTable: UITableViewController
{
    var arr_SolarObjects = ["SUN", "MOON", "STAR"]

    override func numberOfSections(in tableView: UITableView) -> Int    {
        return 1
    }

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

    override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath){
        print("A SolarObject is selected")
    }

    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
    {
        var cell = tableView.dequeueReusableCell(withIdentifier: "Cell")

        if cell == nil {
            cell = UITableViewCell(style: .default, reuseIdentifier: "Cell")
            cell?.frame(forAlignmentRect: CGRect(x: 0, y: 0, width: tableView.frame.size.width, height: 30))
        }

        cell?.textLabel?.text = arr_SolarObjects[indexPath.row]

        return cell!
    }
}

此示例运行正常,但是当我选择一行时,didSelectRowAt方法没有响应 - >(打印("选择了SolarObject")), 那么如何处理行选择的操作呢? 将不胜感激: - )

2 个答案:

答案 0 :(得分:2)

您需要添加...

self.solarObjects.delegate = self.dataSourceTable

didSelectRowUITableViewDelegate

的一部分

答案 1 :(得分:0)

在viewController中添加此行

var dataDelegateTable:DemoTable?

然后在viewDidLoad中添加:     self.solarObjects.delegate = self.dataDelegateTable