表视图didselectrowatindex返回零(斯威夫特)

时间:2015-07-14 20:39:55

标签: ios swift uitableview

我有一个UITableViewController,它有一个名为didselectrowatindex的函数,它应返回一个单元格上的文本,但它返回nil。如何在Swift UITableViewController中返回所选单元格的文本?

class TableViewController: UITableViewController {
    override func viewDidLoad() {
        super.viewDidLoad()
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }

    override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
        let indexPath = tableView.indexPathForSelectedRow();
        let currentCell = tableView.cellForRowAtIndexPath(indexPath!) as UITableViewCell!;
        println(currentCell.textLabel!.text)
    }
}
编辑:我忘了提到我正在使用静态细胞,这意味着数据已经设置好,所以我认为不需要使用cellforrowatindex。

2 个答案:

答案 0 :(得分:1)

看起来你需要实现cellForRowAtIndexPath

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    let cell = self.tableView.dequeueReusableCellWithIdentifier("cell")
    let text = self.tableContents[indexPath.row] as! String
//tableContents is just the array from which you're getting what's going in your tableView, and should be declared outside of your methods
    cell.textLabel?.text = text
    return cell
}

还要添加

self.tableView.registerClass(UITableViewCell.self, forCellReuseIdentifier: "cell")

进入viewDidLoad 希望这有帮助!

编辑静态单元格:

好的,所以这样看,也许会尝试替换

let currentCell = tableView.cellForRowAtIndexPath(indexPath!) as UITableViewCell!; 

let currentCell = super.tableView(self.tableView, cellForRowAtIndexPath: indexPath) 

并按照Lancelot在你的问题评论中的建议摆脱它上面的一行。

编辑二:

我使用了以下代码并且有效:

class TableViewController: UITableViewController {
    override func viewDidLoad() {
        super.viewDidLoad()
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }

    override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
        let currentCell = super.tableView(self.tableView, cellForRowAtIndexPath: indexPath)

        let text: String = currentCell.textLabel!.text as String!

        print(text)
    }
}

答案 1 :(得分:0)

如果您的标题数据源数组为:

    var arrTitlesDataSource = ["t1","t2","t3"]

所以你正在使用它们来设置cellForRow这样的标题:

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

您可能会以这种方式获得标题:

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

    var title = arrTitlesDataSource[indexPath.row]
    println(title)
}