如何将 tableView:didSelectRowAtIndexPath 中选择的对象传递给压入堆栈的新 UIViewControllers?
How do you pass the object selected in tableView:didSelectRowAtIndexPath to new UIViewControllers pushed onto the stack?
我在 tableViewController 中显示项目列表,然后当 selected 将带有 .xib 文件的 viewController 推入堆栈时,给出更详细的解释带有几个 UIButton 的 textView 中的项目 select 以进行进一步操作。到目前为止,所有这些都有效。
我 运行 遇到的问题是将另一个 viewController 推入堆栈,其中包含来自 tableView 中 selected 的原始对象的信息的可编辑文本视图。我可以加载 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,我可以让一个想法显示出来,但一直无法让我原来的 selection 从 tableView 中通过。
你不想要这个吗?
JASIdea *selectedIdea = self.idea;
如果我对您的代码的理解正确,您将从 JASDetailViewController
上的编辑按钮转到 JASEditViewController
,但 JASIdea
实例保持不变。您将 selectedIdea
从 table 视图的 didSelectRowAtIndexPath
传递到 JASDetailViewController.idea
。这意味着当您在 JASDetailViewController.editButton
中时,它就在 self.idea
中
由于您是从共享实例获取数据,因此无需将 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];
我在 tableViewController 中显示项目列表,然后当 selected 将带有 .xib 文件的 viewController 推入堆栈时,给出更详细的解释带有几个 UIButton 的 textView 中的项目 select 以进行进一步操作。到目前为止,所有这些都有效。
我 运行 遇到的问题是将另一个 viewController 推入堆栈,其中包含来自 tableView 中 selected 的原始对象的信息的可编辑文本视图。我可以加载 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,我可以让一个想法显示出来,但一直无法让我原来的 selection 从 tableView 中通过。
你不想要这个吗?
JASIdea *selectedIdea = self.idea;
如果我对您的代码的理解正确,您将从 JASDetailViewController
上的编辑按钮转到 JASEditViewController
,但 JASIdea
实例保持不变。您将 selectedIdea
从 table 视图的 didSelectRowAtIndexPath
传递到 JASDetailViewController.idea
。这意味着当您在 JASDetailViewController.editButton
self.idea
中
由于您是从共享实例获取数据,因此无需将 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];