Swift 获取所选行的索引以用于准备segue
我想根据选择的行将不同的数组从一个ViewController传递到另一个ViewController。Swift 获取所选行的索引以用于准备segue,swift,uitableview,segue,Swift,Uitableview,Segue,我想根据选择的行将不同的数组从一个ViewController传递到另一个ViewController。 如何获取所选行的索引? 我尝试过这个,但不起作用: let toDetailVCSegue = "ToDetailVCSegue" override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { performSegue(withIdentifier:
如何获取所选行的索引?
我尝试过这个,但不起作用:
let toDetailVCSegue = "ToDetailVCSegue"
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
performSegue(withIdentifier: toDetailVCSegue, sender: indexPath)
}
func prepare(for segue: UIStoryboardSegue, sender: IndexPath?)
{
if segue.identifier == toDetailVCSegue
{
let destination = segue.destination as! DetailViewController
if let indexPath = tableView.indexPathForSelectedRow{
if indexPath.row == 0 {
destination.itemArray = namesArray
print("test")
}
if indexPath.row == 1 {
destination.itemArray = scoresArray
}
if indexPath.row == 2 {
destination.itemArray = timesArray
}
if indexPath.row == 3 {
destination.itemArray = completedArray
}
}
}
}
试试这个
let toDetailVCSegue = "ToDetailVCSegue"
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
self.performSegue(withIdentifier: toDetailVCSegue, sender: indexPath)
}
func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if
let destination = segue.destination as? DetailViewController,
let indexPath = sender as? IndexPath {
switch indexPath.row {
case 0: destination.itemArray = namesArray
case 1: destination.itemArray = scoresArray
case 2: destination.itemArray = timesArray
case 3: destination.itemArray = completedArray
default: break
}
}
}
不得更改
prepare(for
的签名,否则将不会调用该签名。sender
参数必须是Any?
将sender
参数强制转换为indepath
,我建议使用switch
语句
func prepare(for segue: UIStoryboardSegue, sender: Any?)
{
if segue.identifier == toDetailVCSegue {
let destination = segue.destination as! DetailViewController
let indexPath = sender as! IndexPath
switch indexPath.row {
case 0: destination.itemArray = namesArray
case 1: destination.itemArray = scoresArray
case 2: destination.itemArray = timesArray
case 3: destination.itemArray = completedArray
default: break
}
}
}
您无法更改
prepare
函数的签名。这将是“函数重载”,因此基本上不会调用另一个函数。是的,我注意到了,只是在复制代码时忘了删除后者。这就是为什么我声明如果让indexath=sender as?indexath
。谢谢您的回复尽管如此,还是更新了我的答案!@tmkvui如果您在didSelectRowAt
中所做的一切都是传递所选行,那么您根本不需要它。只需在prepare(for:sender:)中获取所选行即可
使用让indexath=tableView.indexPathForSelectedRow
。这是一个可选选项,所以可以用通常的方式安全地打开它。谢谢!这非常好。如果我以后想传递一个heightForRowAt
参数呢?这种解决方案如何实现?任何都意味着你可以传递任何你喜欢的东西甚至数组、字典或更复杂的对象。