使用segue传递tableviewcell数据?

时间:2013-12-25 22:35:08

标签: ios objective-c uitableview

我有一个转到视图控制器的popover segue。我想在单击一个单元格时在视图控制器中设置一些属性。我尝试使用-prepareForSegue:,但后来我意识到它没有所选单元格的范围。我知道我必须使用:

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 委托方法,但我不确定这将如何影响popover segue。我是否必须以编程方式创建弹出窗口,还是有另一种方式?

非常感谢!

〜Carpetfizz

3 个答案:

答案 0 :(得分:3)

使用self.tableView.indexPathForSelectedRow从表的数据源中获取数据,例如支持表数据的数组。如果出于某种原因,您不想从数据源获取数据,那么sender就是被点击以触发segue的UITableViewCell

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    if ([segue.identifier isEqualToString:@"YourSegueID"]) {
        YourDestinationViewControllerClass* destinationController = segue.destinationViewController;
        destinationController.somePublicProperty = self.yourTablesDataSourceArray[self.tableView.indexPathForSelectedRow.row];

        UITableViewCell *cell = (UITableViewCell *)sender;
        destinationController.someOtherPublicProperty = cell.textLabel.text;
    }
}

答案 1 :(得分:1)

因此,为您的VC添加NSIndexPath专有权。我们称之为selectedCell。在tableView:didSelectRowAtIndexPath方法中,将选定的索引路径保存到实例变量。

然后在prepareForSegue方法中,使用实例变量。

或者,在prepareForSegue方法中,您可以使用表视图的indexPathForSelectedRow方法向表视图询问当前选定的行。

答案 2 :(得分:0)

最好的方法是使用indexPathForSelectedRow属性 例如,您可以编写如下代码:

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    if ([segue.identifier isEqualToString:@"YourSegueIdentifier"])
    {
        NSIndexPath *indexPath = [sender indexPathForSelectedRow];
        NextViewController *vc = (NextViewController *)segue.destinationViewController;
        vc.yourProperty = @"Some Value";
    }
}

假设NextViewController作为您的segue目标控制器而yourProperty作为您想要在segue期间设置的属性,您可以从父控制器访问和设置信息,因为indexPathForSelectedRow会自动知道哪个单击了单元格 可以找到更多信息here