我有一个转到视图控制器的popover segue。我想在单击一个单元格时在视图控制器中设置一些属性。我尝试使用-prepareForSegue:
,但后来我意识到它没有所选单元格的范围。我知道我必须使用:
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
委托方法,但我不确定这将如何影响popover segue。我是否必须以编程方式创建弹出窗口,还是有另一种方式?
非常感谢!
〜Carpetfizz
答案 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。