2017-02-21 74 views
0

我以编程方式创建了一个简单的TableView示例。didSelectRowAt方法未被调用(swift 3)

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方法没有响应 - >(印刷(“A SolarObject is selected”)), 那么如何处理行选择的操作? 帮助将不胜感激:-)

回答

2

您需要添加...

self.solarObjects.delegate = self.dataSourceTable 

didSelectRow是部分从UITableViewDelegate

+0

现在它的工作原理。谢谢Mhergon。 –

0

加入这一行你的viewController

VAR dataDelegateTable:DemoTable?

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

+0

该对象不初始化类型DemoTable所以它不会工作,但下面的代码将工作 - > var dataDelegateTable:DemoTable = DemoTable() –

+0

是的你是对的。感谢您的反馈。 –

相关问题