Swift 3中的“didSelectRowAt indexPath”问题

时间:2017-01-01 20:36:33

标签: swift3 didselectrowatindexpath

我很快乐,但我已经设法跟进了大部分时间。但是,我的代码存在一个问题,即代码本身甚至无法识别身份(我没有收到任何错误信号)。我正在尝试从表视图中单击一行以使其转到下一页但我不认为代码正在识别didselectrow方法。也许你们中有一位经验丰富的人可以帮助我。

以下是代码:

import UIKit
import Foundation

class OnePercentersViewController: UIViewController, UITableViewDataSource
{

    var copiedExecutiveArray : [String] = NSArray() as! [String]
    var identities : [String] = NSArray() as! [String]

    override func viewDidLoad()
    {
        super.viewDidLoad()
        let copyExecutiveNames : ExecutiveArray = ExecutiveArray()
        copiedExecutiveArray = copyExecutiveNames.executiveNames
        identities = copyExecutiveNames.executiveNames
    }

    //how many sections in table
    func numberOfSections(in tableView: UITableView) -> Int
    {
        return 1
    }

    //returns int (how many rows)
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int
    {
        return copiedExecutiveArray.count
    }

    //contents of each cell
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
    {
        let cell = tableView.dequeueReusableCell(withIdentifier: "Cell")//UITableViewCell()
        let personName = copiedExecutiveArray[indexPath.row]
        cell?.textLabel?.text = personName
        return cell!

    }

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

        let execName = identities[indexPath.row]
        let viewController = storyboard?.instantiateViewController(withIdentifier: execName)
        self.navigationController?.pushViewController(viewController!, animated: true)
        print("button clicked")
        tableView.deselectRow(at: indexPath as IndexPath, animated: true)
    }

}

2 个答案:

答案 0 :(得分:0)

我还没有检查过代码的其他部分,但要使tableView(_:didSelectRowAt:)正常工作,ViewController需要符合UITableViewDelegate

class OnePercentersViewController: UIViewController, UITableViewDataSource, UITableViewDelegate

您还需要将delegate的{​​{1}}连接到故事板中的ViewController。或者,如果您UITableView @IBOutlet,则可以在代码中执行此操作。无论如何,不​​仅UITableView,还有dataSource

这不是一个关键问题,但您可以将该类的前两行写为:

delegate

答案 1 :(得分:0)

在花了一天半的时间观看Youtube视频并阅读类似问题的评论之后,tt接受了反复试验但我终于得到了感谢你们!当我读到我必须将代表连接到ViewController通过故事板,谢谢!

以下是具有类似问题的最终代码:

    import UIKit
    import Foundation

    class OnePercentersViewController: UIViewController,UITableViewDataSource, UITableViewDelegate
    {

var copiedExecutiveArray : [String] = []
var identities : [String] = []

override func viewDidLoad()
{
    super.viewDidLoad()
    let copyExecutiveNames : ExecutiveArray = ExecutiveArray()
    copiedExecutiveArray = copyExecutiveNames.executiveNames
    identities = copyExecutiveNames.executiveNames
}

//how many sections in table
func numberOfSections(in tableView: UITableView) -> Int
{
    return 1
}

//returns int (how many rows)
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int
{
    return copiedExecutiveArray.count
}

//contents of each cell
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
{
    let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath) 
    let personName = copiedExecutiveArray[indexPath.row]
    cell.textLabel?.text = personName
    return cell
}

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath)
{
    let execName = identities[indexPath.row]
    let viewController = storyboard?.instantiateViewController(withIdentifier: execName)
    self.navigationController?.pushViewController(viewController!, animated: true)
    tableView.deselectRow(at: indexPath as IndexPath, animated: true)
}



    }
相关问题