来自 tableViewController 子类的 UINavigationController pushViewController

Posted

技术标签:

【中文标题】来自 tableViewController 子类的 UINavigationController pushViewController【英文标题】:UINavigationController pushViewController from tableViewController subclass 【发布时间】:2011-08-09 09:03:04 【问题描述】:

当我尝试从 uitableviewcontroller 子类推送某些视图控制器时,我看到了一个奇怪的应用程序行为。

让我先解释一下。我创建了主笔尖,它链接到导航控制器内的 rootViewController (appDelegate)。在那个笔尖中添加了一个UITableView 和一个自定义UITableViewController 子类News_TableViewController,就像屏幕截图中显示的那样:

当我尝试执行下面的代码时,我什么也没得到:

My_WebView *webView = [[My_WebView alloc] initWithNibName:@"My_WebView" bundle:nil];
[self.navigationController pushViewController:webView animated:YES];

然后我检查了 self.navigationController 对象,但我给了我 NULL:

NSLog(@"OBJ: %@",self.navigationController);

尽管我的自定义类实际上位于 navigationController 下,但我怎么没有得到对 navigationController 的引用?

谢谢

【问题讨论】:

你在tableViewController的哪个方法中推webView? 我在 viewForFooterInSection 方法中使用了它。但它在其他地方也不起作用。 NSLog(@"%@",self.navigationController) 总是返回 NULL。 我觉得应该先在 TableViewController 子类的 viewDidLoad 方法中放一个断点或者 NSLog。打到了吗? 是的,除了关于navigationController 的部分,一切正常。我已经按照tutorial 在另一个 tableView 中创建了类似 tableView 的脉冲。 从 rootViewController 到这个自定义 tableViewController 的连接可能有问题。但是我可以在哪里/如何在 xib 中实现这一点? 【参考方案1】:

正如您所提到的,News_TableViewController 是一个 UITableViewController,因此是一个 UIViewController。我认为您没有初始化导航控制器!推荐的方法是在您的 appDelegate 类的委托方法中初始化 navigationController,如下所示:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
RootViewController *rootViewController = [[RootViewController alloc]init];
_navigationController = [[UINavigationController alloc] initWithRootViewController:rootViewController];
self.window.rootViewController = self.navigationController;
[self.window makeKeyAndVisible];
return YES;

其中 RootViewController 是 News_TableViewController 类。

【讨论】:

我明白你在说什么,但这里不是这样。在 appDelegate 我这样做: navigationController = [[UINavigationController alloc] initWithRootViewController:self.viewController];其中 self.viewController 是带有 xib 的 UIViewController。好吧,在那个 xib 中,我已经定义了 News_TableViewController,就像你在我的问题中看到的图片一样...... 我按照你说的做了。删除了不需要的 UIViewController 并改为推送 News_ViewController。现在工作。但是这真的很奇怪,没有按照我的方式工作。显然我配置错误...谢谢! 我认为这是您的 appDelegate 中的错误:initWithRootViewController:self.viewController。你应该已经初始化了 News_ViewController,然后写了 initWithRootViewController:News_ViewController,剩下的命令和往常一样。您提供的图像是 News_TableViewController 的 xib 对吗?所以,你不需要拖放“新闻表视图控制器”。 tableView 委托可以处理这个

以上是关于来自 tableViewController 子类的 UINavigationController pushViewController的主要内容,如果未能解决你的问题,请参考以下文章

来自 TableViewController 的奇怪值,其中填充了来自 JSON 的数据

IOS:来自tableviewcontroller的UITabBarControllerDelegate方法

如何通过来自同一个 TableViewController 的多个 segue 到同一个 ViewController

将 UITableView 委托和数据源从 tableViewController 中分离出来

以编程方式切换视图时iphone tableviewcontroller左/右滑动?

故事板中 tableviewController 中的原型 tableview 单元格