如何在swift中获取所选行的textLabel?

时间:2014-10-02 10:17:13

标签: uitableview swift ios8 tableview xcode6

所以我试图获取我选择的行的textLabel的值。我试过打印它,但它没有用。经过一些研究后,我发现这段代码有效,但仅限于Objective-C;

    - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath    *)indexPath
    {
        NSLog(@"did select  and the text is %@",[tableView cellForRowAtIndexPath:indexPath].textLabel.text);]
    }

我找不到Swift的任何解决方案。虽然打印indexpath.row是可能的,但这不是我需要的。

那我该怎么办?或者什么是Swift-version'这段代码?

9 个答案:

答案 0 :(得分:110)

试试这个:

override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {

    let indexPath = tableView.indexPathForSelectedRow() //optional, to get from any UIButton for example

    let currentCell = tableView.cellForRowAtIndexPath(indexPath) as UITableViewCell

    print(currentCell.textLabel!.text)

答案 1 :(得分:13)

如果你是一个继承自UITableViewController的类,那么这就是swift版本:

override func tableView(tableView: UITableView, didDeselectRowAtIndexPath indexPath: NSIndexPath) {
    let cell = self.tableView.cellForRowAtIndexPath(indexPath)
    NSLog("did select and the text is \(cell?.textLabel?.text)")
}

请注意,cell是可选的,因此必须将其解包 - textLabel也是如此。如果2中的任何一个为nil(不太可能发生,因为使用有效的索引路径调用该方法),如果要确保打印有效值,则应检查cell和{{} {1}}都不是零:

textLabel

答案 2 :(得分:5)

Swift 4

获取所选行的标签:

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    let cell = tableView.cellForRow(at: indexPath) as! TableViewCell
    print(cell.textLabel?.text)
}

获取取消选择行的标签:

func tableView(_ tableView: UITableView, didDeselectRowAt indexPath: IndexPath) {
    let cell = tableView.cellForRow(at: indexPath) as! TableViewCell
    print(cell.textLabel?.text)
}

答案 3 :(得分:1)

如果您想根据匹配的name> isovector hello isovector name> wasnt memoized hello wasnt memoized 打印UITableViewCell的文字,则必须使用NSIndexPath的{​​{1}}方法并获取使用UITableViewDelegate tableView:didSelectRowAtIndexPath:方法引用所选UITableViewCell

例如:

UITableView

然而,由于种种原因,我不鼓励您使用以前的代码。您的cellForRowAtIndexPath:应该只负责显示模型提供的某些内容。 在大多数情况下,您希望根据import UIKit class TableViewController: UITableViewController { override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return 4 } override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { let cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) switch indexPath.row { case 0: cell.textLabel?.text = "Bike" case 1: cell.textLabel?.text = "Car" case 2: cell.textLabel?.text = "Ball" default: cell.textLabel?.text = "Boat" } return cell } override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { let selectedCell = tableView.cellForRowAtIndexPath(indexPath) print(selectedCell?.textLabel?.text) // this will print Optional("Bike") if indexPath.row == 0 } } 打印模型的内容(可能是UITableViewCell Array)。通过这样做,您将分离每个元素的职责。

因此,我建议这样做:

String

正如您所看到的,使用此代码,您不必处理选项,甚至不需要在NSIndexPath内找到匹配import UIKit class TableViewController: UITableViewController { let toysArray = ["Bike", "Car", "Ball", "Boat"] override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return toysArray.count } override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { let cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) cell.textLabel?.text = toysArray[indexPath.row] return cell } override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { let toy = toysArray[indexPath.row] print(toy) // this will print "Bike" if indexPath.row == 0 } } 的引用打印所需的文字。

答案 4 :(得分:1)

在我的情况下,我做了一些小改动,当我在tabelview中搜索值时选择(didSelectRowAtIndexPath)单元格,它返回单元格的索引,所以我在将一个viewControler移动到另一个时遇到问题。使用此方法我找到了重定向到新viewControler的解决方案

let indexPath = tableView.indexPathForSelectedRow!
let currentCellValue = tableView.cellForRow(at: indexPath!)! as UITableViewCell
let textLabelText = currentCellValue.textLabel!.text
print(textLabelText) 

答案 5 :(得分:1)

快速4: 通过覆盖方法

override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        let storyboard = UIStoryboard(name : "Main", bundle: nil)
        let next vc = storyboard.instantiateViewController(withIdentifier: "nextvcIdentifier") as! NextViewController

       self.navigationController?.pushViewController(prayerVC, animated: true)
}

答案 6 :(得分:0)

维护一个以cellforindexPath方法本身存储数据的数组: -

[arryname objectAtIndex:indexPath.row];

didselectaAtIndexPath方法中也使用相同的代码..祝你好运:)

答案 7 :(得分:0)

这将有效:

PHASE_NAME

答案 8 :(得分:-1)

我使用以下方式,并且工作正常:-

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

     let cell = tableView.cellForRow(at: indexPath)
     cell?.textLabel?.text = "Selected Row"
}