pushViewController 没有推送

Posted

技术标签:

【中文标题】pushViewController 没有推送【英文标题】:pushViewController is not pushing 【发布时间】:2011-12-18 14:57:06 【问题描述】:

我使用 initWithNibName 将单元格推送到详细视图,但我想使用单个故事板而不是拥有大量 nib 文件。下面的代码应该在单击单元格时将视图推送到 subcategoriesViewController。这些单元格是来自 json 数据的动态单元格。

它没有给出任何错误。您认为这是导航控制的问题吗?只是为了测试,我在这个视图上添加了一个按钮,它可以工作;当我点击它时,它会推送到下一个视图。

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

    NSDictionary *dict = [rows objectAtIndex: indexPath.row];


    subcategoriesViewController *controller = [self.storyboard instantiateViewControllerWithIdentifier:@"subcategoriesViewController"];
    controller.CATNAME = [dict objectForKey:@"C_NAME"];
    controller.CATNUMBER = [dict objectForKey:@"CAT_ID"];
    [self.navigationController pushViewController:controller animated:YES];
//    [controller release];

好的,我想我找到了原因;但不知道如何解决。

这个控制器中的tableview其实是一个viewController的子视图。我复制了这些文件并创建了一个新视图,它是一个 TableViewController。这段代码在 TableViewController 中使用时可以完成这项工作,但在 tableview 是 ViewController 的子视图的控制器中使用时不会这样做。

我希望表格成为子视图,因为我想在表格上方放置图像。所以,我认为这里的问题是这一行:

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

它不引用视图中的表。谁能告诉我如何修改它以引用视图中的表格?

【问题讨论】:

【参考方案1】:

如果didSelectRow... 没有被调用,那么你的视图控制器可能没有被设置为你的表视图的代理。

这是在使用 UITableViewController 时自动为您设置的,但在使用标准视图控制器时您必须明确执行此操作。

【讨论】:

是的。这是有道理的。我想到了,但我使用了下面的代码来做到这一点。这还不够好吗? @interface categoriesViewController : UIViewController UITableView *tableview; 没错,但你还需要告诉表视图它的委托人是谁。您可以在情节提要中连接它,将委托出口从表格视图拖到视图控制器。 我这样做了,但随后它开始崩溃而没有给出任何理由。我想我明天会重新开始。感谢您的宝贵时间。 从 tableview 到视图控制器的引用出口解决了这个问题。【参考方案2】:

您的问题的答案通常是self.navigationController 实际上是nil,因为您的视图没有导航控制器。您可能需要获得一个指向您项目的导航控制器的指针并将您的视图推送到它上面。

【讨论】:

不,它不是零。我用 Nslog 确认了一下。我仍然认为问题在于引用。 是你认为的导航控制器吗? 原来是界面生成器中缺少引用。

以上是关于pushViewController 没有推送的主要内容,如果未能解决你的问题,请参考以下文章

popViewController 和 pushViewController 动画

PushViewController 全屏

IOS 7 pushviewcontroller 错误

Swift:如何取消延迟的 pushViewController?

如何使用 pushViewController 方法防止计时器重置?

iOS 7 中的 PushViewController