我对使用NIB文件以及何时应该使用代码感到困惑。 这是我的问题:
我有一个带有RootController及其NIB文件的导航应用程序。 RootController的NIB文件包含TableView。 当我单击一个单元格时,我使用加载内容的请求初始化一个新连接。 当连接完成加载后,我从NIB文件创建一个新的postViewController(自定义),然后将它推送到navigationController viewController堆栈,如下所示:
PostViewController *postViewController = [[PostViewController alloc] initWithNibName:@"PostViewController" bundle:[NSBundle mainBundle]];
[postViewController.webView setDelegate:self];
postViewController.postContent = [[postsData objectForKey:@"post"] objectForKey:@"content"];
[self.navigationController pushViewController:postViewController animated:YES];
[PostViewController release];
然后,正如您所看到的,我尝试将rootViewController设置为webView的委托,以便能够拦截链接上的单击并在堆栈上推送新的ViewController。我需要新的视图来使用带有后退按钮的导航栏。
问题:看起来setDelegate无法正常工作,因为webView:shouldStartLoadWithRequest:navigationType永远不会被调用!
我想我应该在NIB文件中设置委托但我不知道如何。 PostViewController的NIB文件不知道RootViewController ......
以下是NIB文件的屏幕截图:
如果您需要更多详细信息,请问我。
非常感谢...帮助我不再为另一天敲打我的脑袋:)
答案 0 :(得分:3)
当您致电postViewController.webView
时,请确保setDelegate:
不为零。还要确保没有在其他地方调用它,并确保代理插座没有连接到NIB中的任何内容。
其他几条评论:
在这种情况下,使用根视图控制器作为webview的委托是有点不寻常的。它应该工作,但将这些委托方法下移到PostViewController可能更有意义。在那里,您仍然可以拦截链接点击并致电[self.navigationController pushViewController:animated:]
。
[PostViewController release]
正在发布类对象。不是个好主意。相反,您应该致电[postViewController release]
。
答案 1 :(得分:1)
[postViewController.webView setDelegate:self];
设置当前Controller的委托不是postViewController
。尝试:
[postViewController.webView setDelegate:postViewController];
您可以将此行放在pushViewController:animated:
下方,然后webView应该已经存在。