根据UITableView中的单元格选择显示正确的View Controller实例

时间:2015-04-15 01:29:24

标签: objective-c uitableview parse-platform didselectrowatindexpath

我理解这可能会在我在网站上看到的其他问题(参见参考资料)的答案中有部分内容,但由于我的经验有限,我无法理解每个部分,因为它与我的代码有关。请原谅我有任何重复。

我有一个名为threadsViewController的PFQueryTableViewController(本质上是一个UITableViewController),它从Parse后端获取单元信息。表视图由与您在Web论坛上看到的类似的线程组成。

然后我有一个单独的类postsViewController,这是另一个PFQueryTableViewController,我希望显示一个包含该特定线程的所有响应(' posts')的表。

我正在寻找的功能是用户点击线程(图像中的左侧屏幕)以显示postsViewController(右侧屏幕),其中仅包含与该相关的帖子/响应线。 (见下面的基本图表)。

Desired table view action

我从研究中了解到的信息:

  • Parse后端是使用线程帖子的类建立的。
  • 我可能会使用didSelectRowAtIndexPath委托方法

我需要帮助:

  • 如何知道用户点击了哪个线索单元格,然后将其传递,以便postsViewController仅显示该线程中的帖子?
  • 外行人对如何使用indexPath.row
  • 的描述

我了解如何完成PFQueries等以获取单元格的数据,我只是不知道如何实现导航以及如何告诉postsViewController要显示哪些帖子。

如果它有所帮助,这是我到目前为止的实现。我尝试将一个属性添加到名为postsViewController的{​​{1}},以某种方式存储该帖子,但除此之外,我没有想法!

fromThread

参考

How to filter a Parse query by an tableview index?

Pass Index Number between UITableView List segue

didSelectRowAtIndexPath and prepareForSegue implementation

2 个答案:

答案 0 :(得分:0)

你走在正确的轨道上。您需要知道如何做两件事:(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"。

要获取新实例,请使用该storyboard 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为与所选主题相关联的帖子形成查询所需的内容。

答案 1 :(得分:0)

您可以使用类似的内容将单元格的数据传递到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;
    }
}