将tableView单元格的indexPath传递给另一个控制器

时间:2015-04-09 10:59:26

标签: ios uitableview segue

我想将select row作为indexPath传递给另一个控制器。因为我写了以下代码:

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as UITableViewCell

    let indexPath = tableView.indexPathForSelectedRow();

    return cell
}


override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    var secondController: SecondViewController = segue.destinationViewController as SecondViewController
    secondController.rowIndex.text = indexPath
}

但我的indexPath是零。为什么呢?

3 个答案:

答案 0 :(得分:2)

在cellForRowAtIndexPath中,这是错误的:

let indexPath = tableView.indexPathForSelectedRow();

对于每一行,您将所选行保存在一个变量中,该变量将在cellForRowAtIndexPath完成后销毁,因为它不会被任何对象保留。

你只需要在prepareForSegue

中使用它
var secondController: SecondViewController = segue.destinationViewController as SecondViewController
if let selectedIndexPath =  tableView.indexPathForSelectedRow();
    secondController.rowIndex= selectedIndexPath.row

Haven未经过测试,但认为这样可行。希望它有所帮助。

答案 1 :(得分:0)

为了满足您的要求,请执行以下操作。

步骤1:声明全局变量(该范围在类中)。

喜欢var selectedIndexForRow:Int? = nil

var selectedIndexForSection:Int? = nil

第2步:覆盖didSelectRowAtIndexPath

override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
  tableView.deselectRowAtIndexPath(indexPath, animated: true)

selectedIndexForRow = indexPath.row;
selectedIndexForSection = indexPath.section;


}

第3步:将selectedIndexForRowselectedIndexForSection变量传递给另一个控制器

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
var secondController: SecondViewController = segue.destinationViewController as SecondViewController
secondController.row= selectedIndexForRow
secondController.section= selectedIndexForSection
}

答案 2 :(得分:0)

sender中的prepareForSegue是您选择的UITableViewCell

只需将其转换为UITableViewCell,然后在indexPathForCell上致电tableView。这将返回所选单元格的indexPath。无需其他变量,全局或其他变量。

抱歉,我无法发布任何Swift代码。我精通Obj-c,但我还不认识Swift。

Obj-C的示例代码如下。我希望你自己写一下Swift的等价物,或者这里有人会编辑它。

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {

    UITableViewCell* cell = (UITableViewCell*)sender;

    NSIndexPath* indexPath = [self.tableView indexPathForCell:cell];

    //Use indexPath as you intend to
}