我有一个带有tabbar和webview的应用程序。我试图让每次用户点击栏时应用程序回到默认URL。现在我正在拦截水龙头并启动一个方法,但它并没有影响我的webview(它没有加载页面)。从类中调用时,该方法可以正常工作,但是当我从我的应用委托中调用它时,我会拦截水龙头。
我怀疑这是我创建SecondViewController对象的方式,它没有指向webview,但我不知道我做错了什么。
以下是代码:
第二个视图标题(WebView所在的位置)
@interface SecondViewController : UIViewController {
IBOutlet UIWebView *secondView;
}
- (void) goToPage;
第二个视图实现
#import "SecondViewController.h"
@implementation SecondViewController
- (void)awakeFromNib
{
[self goToPage];
}
- (void) goToPage
{
NSLog(@"go to page");
NSString *newURL = [NSString stringWithFormat:@"http://pageurl"];
[secondView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:newURL]]];
}
我的app委托,我调用SecondViewController类方法:
#import "RedDragonAppDelegate.h"
#import "SecondViewController.h"
@implementation RedDragonAppDelegate
@synthesize window;
@synthesize rootController;
- (void)applicationDidFinishLaunching:(UIApplication *)application {
// Override point for customization after application launch
[window addSubview:rootController.view];
}
- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController {
NSLog(@"didSelectViewController %d", rootController.selectedIndex);
SecondViewController * sv = [[SecondViewController alloc] init];
if (rootController.selectedIndex == 0){
//NSLog(@"if in didSelectViewController 0");
} else if (rootController.selectedIndex == 1) {
//NSLog(@"if in didSelectViewController 1");
[sv goToPage];
}
}
谢谢你的帮助!
答案 0 :(得分:1)
如果我理解正确,那么在{ - 1}}中有一个SecondViewController
实例连接到Interface Builder中的secondView
实例。您要执行的操作是从UIWebView
的{{1}}实例调用goToPage
。 (特别要注意我正在谈论实例 - 我相信这是潜在的问题。)
在SecondViewController
中,当您执行RedDragonAppDelegate
时,您正在创建tabBarController:didSelectViewController:
的新实例,并且可以调用其SecondViewController * sv = [[SecondViewController alloc] init];
方法,但SecondViewController
是与Interface goToPage
中显示的sv
的实例不同,SecondViewController
与secondView
相关联(即,当您创建{{>>实例 UIWebView
时1}},ivar SecondViewController
未设置,似乎是secondView
,但我不知道它是nil
}。
您可能(*)想要做的是将nil
添加到IBOutlet SecondViewController *sv;
的{{1}},确保在Interface Builder中有@interface
的实例,将RedDragonAppDelegate
的新IBOutlet RedDragonAppDelegate
连接到Interface Builder中的sv
实例,并删除RedDragonAppDelegate
中定义和初始化SecondViewController
的行。
(*)我不是100%肯定这个,因为我不做iPhone的东西,我不知道你的各种观点/对象/等。在XIB / NIB文件中排列,但如果所有内容都在一个XIB / NIB文件中,我很确定它会起作用。