如何将tableView中选择的对象:didSelectRowAtIndexPath传递给推入堆栈的新UIViewControllers?

时间:2015-05-17 20:53:54

标签: ios objective-c uitableview uibutton

我正在tableViewController中显示项目列表,然后当选择一行时,将带有.xib文件的viewController压入堆栈,在textView中提供更详细的项目说明,并选择一些UIButtons来选择采取进一步行动。到目前为止,所有这些都有效。

我遇到的问题是将另一个viewController推送到堆栈上,其中包含可编辑的textViews,其中包含tableView中选择的原始对象的信息。我可以让viewController和.xib加载,但不能加载数据。

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{

    JASDetailViewController *dvc = [[JASDetailViewController alloc]init];

    NSArray *ideas = [[JASIdeaStore sharedStore]allIdeas];

    JASIdea *selectedIdea = ideas[indexPath.row];

    dvc.idea = selectedIdea;

    [self.navigationController pushViewController:dvc animated:YES];
}

这完全填充了DetailViewController。然后,当移动到下一个viewController时:

- (IBAction)editButton:(id)sender
{

    JASEditViewController *evc = [[JASEditViewController alloc]init];

    //NSIndexPath *path = (NSIndexPath *)sender;

    //NSIndexPath *path = [[NSIndexPath alloc]init];

    //path = [NSIndexPath indexPathForItem:0 inSection:0];

    NSArray *ideas = [[JASIdeaStore sharedStore]allIdeas];

    JASIdea *selectedIdea = // Looking for a solution here. . .


    evc.idea = selectedIdea;

    [self.navigationController pushViewController:evc animated:YES];    
}

我可以加载EditViewController,但不能加载数据。差距和注释掉的部分代表了我试图让它发挥作用的一些尝试。通过指定一个特定的indexPath,我可以显示一个想法,但是无法从tableView中获取原始选择以通过。

2 个答案:

答案 0 :(得分:0)

你不想要这个吗?

JASIdea *selectedIdea = self.idea;

如果我正确理解您的代码,您将从JASDetailViewController上的编辑按钮转到JASEditViewController,但JASIdea实例保持不变。您已将selectedIdea从表格视图的didSelectRowAtIndexPath传递到JASDetailViewController.idea。这意味着当你在self.idea

内时,JASDetailViewController.editButton就会出现这种情况

答案 1 :(得分:0)

由于您是从共享实例获取数据,因此无需将selectedIdea传递给JASDetailViewController。相反,你应该创建一个属性,让我们称之为selectedIndex,并传递它。这样,您也可以将该值传递给JASEditViewController。

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{

    JASDetailViewController *dvc = [[JASDetailViewController alloc]init];
    dvc.selectedIndex = indexPath.row;
    [self.navigationController pushViewController:dvc animated:YES];
}

在JASDetailViewController的viewDidLoad中,您可以使用

获取所选的想法
JASIdea *selectedIdea = ideas[self.selectedIndex];