繁体   English   中英

indexPathForSelectedRow()问题,返回不正确的索引。 使用Swift

[英]problems with indexPathForSelectedRow(), returns incorrect index. Using Swift

抱歉,这是一个完整的菜鸟,但是在表视图的didSelectRowAtIndexPath函数中使用indexPathForSelectedRow()时遇到问题。

我想要做的是将表中单元格的textLabel.text值捕获到NSUserDefaults中,然后将其转换为finalView。 在finalView中,标签的文本将基于从TableView中检索的值进行更新。

这是我的tableView中的代码:

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


    let indexpath = tableView.indexPathForSelectedRow() as NSIndexPath! //supposed to get the correct index, but doesn't

    let cell = tableView.cellForRowAtIndexPath(indexpath) as UITableViewCell!

    captureCellVals.setObject(cell.textLabel?.text, forKey: "restoname")

    //code to transfer to final view:

    let view2 = self.storyboard?.instantiateViewControllerWithIdentifier("finalView") as FinalView

    self.navigationController?.pushViewController(view2, animated: true)




}

现在,这是finalView中的代码:

 class FinalView: UIViewController {

   override func viewDidLoad() {
    super.viewDidLoad()


    let values = NSUserDefaults.standardUserDefaults()

    let restName = values.objectForKey("restoname") as String

    Restaurant.text = restName


    }

   @IBOutlet weak var Restaurant: UILabel!

 }

问题是,这确实有效。 实际上,它正在检索单元格的textLabel.text值,将其转换为FinalView,并更新Restaurant.text以显示检索到的名称。 问题在于它从表中检索了不正确的名称。

例如,如果我单击餐厅名称为“ Cafe France”的行,则Restaurant.text更改为“ Tonys Cafe”,而不是预期的“ Cafe France”。 我认为这是索引,但是还可以吗? 非常感谢您的帮助。

您无需使用let index path =。 TableView的方法didSelectRowAtIndexPath已经具有indexPath参数。

只要改变你的路线

let cell = tableView.cellForRowAtIndexPath(indexpath) as UITableViewCell!

let cell = tableView.cellForRowAtIndexPath(indexPath) as UITableViewCell!

并删除这一行

let indexpath = tableView.indexPathForSelectedRow() as NSIndexPath!

NSUserDefaults再次具有一种特定的方法来加载存储的字符串,称为stringForKey()

Restaurant.text = NSUserDefaults().stringForKey("restoname") ?? ""

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM