根据 UITableView 中的单元格选择呈现正确的 View Controller 实例
Presenting correct View Controller instance depending on cell selection in UITableView
我知道这可能包含在我在网站上看到的其他问题的答案中(请参阅参考资料),但由于我的经验有限,我无法理解与以下内容相关的每个部分我的代码。如有重复请见谅
我有一个名为 threadsViewController
的 PFQueryTableViewController(本质上是一个 UITableViewController),它从 Parse 后端获取单元格信息。 table 视图由类似于您在网络论坛上看到的线程组成。
然后我有一个单独的 class postsViewController
,这是另一个 PFQueryTableViewController,我希望显示对该特定线程的所有响应('posts')的 table .
我正在寻找的功能是让用户点击线程(图像中的左侧屏幕)以显示 postsViewController
(右侧屏幕),其中仅包含与 posts/responses 相关的内容到那个线程。 (见下面的基本图)。
我从研究中了解到:
- Parse 后端是用 classes 为 Thread 和 Post.[=64= 建立的]
- 我可能会使用
didSelectRowAtIndexPath
委托方法
我需要什么帮助:
- 我如何知道用户点击了哪个线程单元格,然后将其传递,以便
postsViewController
仅显示来自该线程的帖子?
- 外行人描述如何使用
indexPath.row
等等
我知道如何完成 PFQueries 等来获取单元格的数据,我只是不知道如何实现导航以及如何告诉 postsViewController
要显示哪些帖子。
如果它能以某种方式提供帮助,这是我到目前为止的实现。我已经尝试将 属性 添加到名为 fromThread
的 postsViewController
以某种方式存储线程,但除此之外我没有想法!
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
[super tableView:tableView didSelectRowAtIndexPath:indexPath];
postsViewController *postsVC = [[postsViewController alloc] init];
postsVC.fromThread = //?
[self performSegueWithIdentifier:@"threadsToPosts" sender:self];
}
参考资料
How to filter a Parse query by an tableview index?
Pass Index Number between UITableView List segue
didSelectRowAtIndexPath and prepareForSegue implementation
你走在正确的轨道上。您需要知道如何做两件事:(1) 通过 indexPath
访问您的解析对象,以及 (2) 在导航控制器中推送一个新的视图控制器。
(1) 更简单:PFQueryTableVC
提供了一个名为 objectAtIndexPath:
的方法,它可以满足您的需求。
// indexPath is the indexPath parameter to the didSelectRow delegate method
PFObject *fromThread = [self objectAtIndexPath:indexPath];
(2) 也很简单。但更复杂,因为有几种方法可以做到这一点。 Segue 是更现代的方式,但我认为旧方式更简单,当然更容易用代码描述。视图控制器在情节提要编辑器的 "Identity" 选项卡上获得情节提要 ID。为您的帖子呈现 VC 提供故事板 ID,例如 "PostVC".
要获取新实例,请使用该故事板 ID,如下所示:
MyPostVC *postVC = [self.storyboard instantiateViewControllerWithIdentifier:@"PostVC"];
// initialize it with the PFObject we got above
postVC.fromThread = fromThread;
// present it on the navigation stack
[self.navigationController pushViewController:postVC animated:YES];
而 fromThread
正是 PostVC
查询与所选主题关联的帖子所需要的。
您可以将单元格的数据传递给 prepareForSegue
中的下一个 ViewController,像这样
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
if ([segue.identifier isEqualToString:@"threadsToPosts"]) {
UINavigationController *navCon = segue.destinationViewController;
postsViewController *postsViewController = [navCon.viewControllers objectAtIndex:0];
// Whatever you are populating your tableView with
Thread *thread = [self.thread objectAtIndex:self.tableView.indexPathForSelectedRow.row];
postsViewController.thread = thread;
}
}
我知道这可能包含在我在网站上看到的其他问题的答案中(请参阅参考资料),但由于我的经验有限,我无法理解与以下内容相关的每个部分我的代码。如有重复请见谅
我有一个名为 threadsViewController
的 PFQueryTableViewController(本质上是一个 UITableViewController),它从 Parse 后端获取单元格信息。 table 视图由类似于您在网络论坛上看到的线程组成。
然后我有一个单独的 class postsViewController
,这是另一个 PFQueryTableViewController,我希望显示对该特定线程的所有响应('posts')的 table .
我正在寻找的功能是让用户点击线程(图像中的左侧屏幕)以显示 postsViewController
(右侧屏幕),其中仅包含与 posts/responses 相关的内容到那个线程。 (见下面的基本图)。
我从研究中了解到:
- Parse 后端是用 classes 为 Thread 和 Post.[=64= 建立的]
- 我可能会使用
didSelectRowAtIndexPath
委托方法
我需要什么帮助:
- 我如何知道用户点击了哪个线程单元格,然后将其传递,以便
postsViewController
仅显示来自该线程的帖子? - 外行人描述如何使用
indexPath.row
等等
我知道如何完成 PFQueries 等来获取单元格的数据,我只是不知道如何实现导航以及如何告诉 postsViewController
要显示哪些帖子。
如果它能以某种方式提供帮助,这是我到目前为止的实现。我已经尝试将 属性 添加到名为 fromThread
的 postsViewController
以某种方式存储线程,但除此之外我没有想法!
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
[super tableView:tableView didSelectRowAtIndexPath:indexPath];
postsViewController *postsVC = [[postsViewController alloc] init];
postsVC.fromThread = //?
[self performSegueWithIdentifier:@"threadsToPosts" sender:self];
}
参考资料
How to filter a Parse query by an tableview index?
Pass Index Number between UITableView List segue
didSelectRowAtIndexPath and prepareForSegue implementation
你走在正确的轨道上。您需要知道如何做两件事:(1) 通过 indexPath
访问您的解析对象,以及 (2) 在导航控制器中推送一个新的视图控制器。
(1) 更简单:PFQueryTableVC
提供了一个名为 objectAtIndexPath:
的方法,它可以满足您的需求。
// indexPath is the indexPath parameter to the didSelectRow delegate method
PFObject *fromThread = [self objectAtIndexPath:indexPath];
(2) 也很简单。但更复杂,因为有几种方法可以做到这一点。 Segue 是更现代的方式,但我认为旧方式更简单,当然更容易用代码描述。视图控制器在情节提要编辑器的 "Identity" 选项卡上获得情节提要 ID。为您的帖子呈现 VC 提供故事板 ID,例如 "PostVC".
要获取新实例,请使用该故事板 ID,如下所示:
MyPostVC *postVC = [self.storyboard instantiateViewControllerWithIdentifier:@"PostVC"];
// initialize it with the PFObject we got above
postVC.fromThread = fromThread;
// present it on the navigation stack
[self.navigationController pushViewController:postVC animated:YES];
而 fromThread
正是 PostVC
查询与所选主题关联的帖子所需要的。
您可以将单元格的数据传递给 prepareForSegue
中的下一个 ViewController,像这样
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
if ([segue.identifier isEqualToString:@"threadsToPosts"]) {
UINavigationController *navCon = segue.destinationViewController;
postsViewController *postsViewController = [navCon.viewControllers objectAtIndex:0];
// Whatever you are populating your tableView with
Thread *thread = [self.thread objectAtIndex:self.tableView.indexPathForSelectedRow.row];
postsViewController.thread = thread;
}
}