您的位置:首页 > Web前端 > JavaScript

通过JS控制ViewController

2012-01-11 10:48 309 查看
JS与IOS原生应用程序看似没有联系,其实却暗藏玄机。
URL便是连接它们的桥梁,JS对应的是window.location,IOS对应的是NSURLRequest对象的mainDocumentURL.relativePath属性。

我做了一个Demo,看首页



底部是一个UITabBarController,它是window.rootViewController。UITabBarController的子层是一个UINavigationController,

中间是一个UIWebView,用来加载html文件。

文件系统:



关键代码:

AppDelegate.m代码

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];
// Override point for customization after application launch.
self.viewController = [[ViewController alloc] initWithNibName:@"ViewController" bundle:nil];
_viewController.title = @"Home";
_viewController.tabBarItem.image = [UIImage imageNamed:@"house.png"];

_nav = [[[UINavigationController alloc] initWithRootViewController:_viewController] autorelease];

MoreViewController *moreViewCon = [[[MoreViewController alloc] init] autorelease];
moreViewCon.title = @"More";
moreViewCon.tabBarItem.image = [UIImage imageNamed:@"alarm.png"];

_tabBarController = [[[UITabBarController alloc] init] autorelease];
_tabBarController.viewControllers = [NSArray arrayWithObjects:_nav,moreViewCon,nil];
self.window.rootViewController = _tabBarController;
[self.window makeKeyAndVisible];
return YES;
}


ViewController里包含UIWebView,它实现UIWebViewDelegate的方法
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
ViewController.m代码

- (void)viewDidLoad
{
[super viewDidLoad];
NSString *path = [[NSBundle mainBundle] pathForResource:@"index" ofType:@"html"];
[self.webView loadRequest:[NSURLRequest requestWithURL:[NSURL fileURLWithPath:path]]];
}


#pragma mark - webViewDelegate

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
{
//获取URL并且做比较,判断是否触发了JS事件,注意有"/"
if ([request.mainDocumentURL.relativePath isEqualToString:@"/clicked"]) {
UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"you click me" message:@"clicked" delegate:nil cancelButtonTitle:@"sure" otherButtonTitles:@"cancel", nil];
[alertView show];
[alertView release];

SecondViewController *secondViewCon = [[[SecondViewController alloc] init] autorelease];
[self.navigationController pushViewController:secondViewCon animated:YES];

return false;
}
return  true;
}

index.html代码
<html>
<head>
<title>Home</title>
<script>
function jump()
{
var clicked=true;
window.location="/clicked";     //改变URL  注意:要使用"/"分隔符
alert("js alert :jump");
}

</script>
</head>
<body>
<h1>Page One</h1>
<button onclick="jump()">Click me</button>
</body>
</html>


点击按钮效果:


  

  

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息