0

当我通过另一个具有相同 UINavigationController 的 UIViewController 的代码推送到 UIViewController 时遇到问题。

注释和假设:

  1. 我使用 IB 创建了所有 UIViewController,但想使用代码在它们之间推送。
  2. 两个 UIViewControllers 都包含 UITableViews:第一个选择搜索条件,第二个显示结果。
  3. “LT”代表我班级名称中的联赛表。

我的 UINavigation 控制器中有三个类:

  1. LTMasterNavController - UINavigationController 类型 - 拥有所有后续视图控制器的属性和结果。一旦 LTOverviewViewController 生成了结果,LTResultsViewController 就会从这里检索结果。
  2. LTOverviewViewController - 包含 UITableView 的 UIViewController 类型。用于选择要在 LTResultsViewController 中显示的过滤器。
  3. LTResultsViewController - UIViewController 类型,包含一个 UITableView。用于显示来自 LTOverviewViewController 的结果

请在下面的 Dropbox 链接上找到我的代码: https ://www.dropbox.com/sh/9m37y4f1gws99lf/VGNloaLSVO

当在 LTOverviewViewController 中按下“显示排行榜”按钮时,我希望程序从过滤器中获取结果,然后立即推送到 LTResultsViewController。

使用此代码,它会推送到 LTResultsViewController,但视图似乎不包含任何内容。它是黑色的,没有 UITable 视图,您无法选择任何内容。

在测试/调试中,我在 LTOverviewViewController 中创建了另一个名为“Push to Results”的按钮,并将其连接到 LTResultsViewController 作为 IB 中的推送操作。当按下“显示排行榜”按钮和“推送到结果”按钮时,它工作得很好,但是我希望它在没有用户按下第二个按钮的情况下发生。几天来一直坚持这一点,所以任何帮助将不胜感激!

非常感谢,詹姆斯

4

1 回答 1

1

使用故事板和转场,这相当简单。在情节提要中,单击要在其之间传输数据的 UIViewController 之间的连接,我猜是在 LTOverviewViewController 和 LTResultsViewController 之间,并给 segue 一个标识符名称:说 ResultsSegue。

现在,在 LTOverViewController 中,您需要实现此方法:

- (void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender

在此方法中,您将识别 segue 名称和destinationViewController 并传递您希望新视图控制器拥有的数据。这是一个例子:

- (void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    if ([[segue identifier] isEqualToString:@"ResultsSegue"])
    {
        LTResultsViewController *viewController = [segue destinationViewController];
        [viewController setData:self.data];
    }
}

当 storyboard 想要使用这个特定的 segue 时,这个方法将在移动到新的 viewController 之前被调用并执行。

于 2012-12-11T09:22:08.523 回答