2011-04-08 127 views
0

我对使用NIB文件的时间和使用代码的时间有点困惑。 这是我的问题:iPhone:笔尖文件+代码=混淆

我有一个具有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文件的截图:

RootViewController.xib

PostViewController.xib (File's Owner)

PostViewController.xib (Web View)

如果您需要更多细节只是问我。

非常感谢...帮助我不敲我的头一天:)

+1

当您尝试设置委托时,您是否检查过存在postViewController.webview?我敢打赌它是零,因为视图尚未加载。如果是这样的话,你必须找到另一种方法来设置你的RootVC作为PostVC的Webview委托,就像在你的PostVC中使用一个属性一样,并且你的PostVC应该在ViewDidLoad方法中设置webview委托我认为 – scalbatty 2011-04-08 15:27:20

+0

实际上,如果该笔尖的网点设置正确,webView不应该是零(我认为)。也许在nib文件中有问题? – 2011-04-08 15:42:26

+0

@Luzal:你说得对,postViewController.webView是零,当我尝试将它设置为委托。我一直有这样的问题,如果你有一些建议,让我在这个问题上,我会很高兴听到他们... – teum 2011-04-11 08:14:56

回答

1

[postViewController.webView setDelegate:self];将针对电流控制器不postViewController委托。尝试:

[postViewController.webView setDelegate:postViewController]; 

你可以把下面pushViewController:animated:这条线则应该已经存在的web视图。

+0

如果您的目的是将RVC作为委托,而不是罚款,但对于良好的MVC代码设计,它应该对其自己的内容负责,而不是其他任何人。 – 2011-04-08 15:48:38

+0

我觉得也是这样,这就是为什么我试图这样做,但后来我遇到了另一个问题(我现在记得......)。我提交了另一个问题[这里](http://stackoverflow.com/questions/5619755/iphone-webviewshouldstartloadwithrequestnavigationtype-timing-problem)。 – teum 2011-04-11 10:10:42

+0

现在也解决了另一个问题,谢谢你的帮助。 – teum 2011-04-11 12:04:58

3

确保postViewController.webView不是零,当你调用它setDelegate:。还要确保它没有在其他地方被调用,并确保代理插座没有连接到NIB中的任何东西。

一对夫妇的其他意见:

  1. 这是一个有点不寻常使用你的根视图控制器作为web视图的委托在这样的情况下。它应该可以工作,但将这些委托方法下移到PostViewController中可能更有意义。从那里你仍然可以拦截链接点击并致电[self.navigationController pushViewController:animated:]

  2. [PostViewController release]正在释放类对象。不是一个好主意。相反,你应该打电话给[postViewController release]

+0

是的,它是零。但它没有被其他地方调用,代理插座没有连接到我的NIB中的任何东西。 1.这就是我的想法,然后我试图将所有内容都移动到PostViewController中,但是我无法将其视为Web视图委托。我不记得我在哪里以及如何(可能有什么错误),我改变了一切,因为它没有工作。 2. True:o(或者我应该说YES) – teum 2011-04-11 08:48:47

+0

事实上,当我将所有内容移动到PostViewController时,它都有效,但我遇到了另一个问题。我提交了另一个问题[这里](http://stackoverflow.com/questions/5619755/iphone-webviewshouldstartloadwithrequestnavigationtype-timing-problem)。 – teum 2011-04-11 10:12:33

+0

现在也解决了另一个问题,谢谢你的帮助。 – teum 2011-04-11 12:05:17