所以我试图获取我选择的行的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'这段代码?
答案 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"
}