HTML 5 + iOS – 创建混合应用程序

我正在尝试使用HTML 5将我的原生iOS应用程序转换为混合应用程序。经过研究后,我最终得到了jQuery mobile + phoneGap。

我的问题是

  1. 是否可以在单个视图中混合使用html 5和本机iOSfunction? 例如,我可以使用html文本字段来获取值,并使用它来使用iOS选择器进行一些转换。
  2. 是否可以从html页面导航到本机xib?
  3. 最后有没有更好的解决方案来创建混合应用程序?

提前致谢

  1. 是的,您可以在单个“视图”中混合使用原生iOSfunction。 如果您希望在Web视图中插入原生iOS选择器,那实际上是不可能的。 正如nhahtdh所提到的,您添加的任何本机iOS视图都将放置在HTML5 UIWebView之上。 要执行这样的任务,您需要通过Javascript掌握通信。 有关如何在ObjC和Javascript之间轻松通信以在本机和HTML之间来回传递值的技术,请参阅https://github.com/diy/conduit等框架。

  2. 可以从HTML页面执行导航(例如,单击链接时),通过设置iOS应用程序来监视特定的URL请求,并根据它们执行某些操作。 我已经将NSURLCache用于此目的。 因此,如果您希望HTML中的链接触发xib文件的加载,您可以通过NSURLCache监视要请求的URL,并在看到它时加载xib。 这个链接帮助我掌握了这项技术。

  3. 据我所知,所有混合iOS + HTML框架都使用这种通用技术来建立类似REST的URL请求集,这些URL请求可以由类似NSURLCache的系统解析,并根据这些URL触发本机事件。 虽然使用现有框架可能会节省一些时间,但实现更简单的function并不困难。 但是,大型框架可能会帮助您进行更高级的HTML资源缓存。

可能是我迟到了,但前两个问题的答案是肯定的,你可以。 您可以使用Javascript调用具有Picker显示代码和导航/推送其他视图的Objective C方法。 您只需使用UIWebViewDelegate在本机应用中跟踪它们。 这是我如何做到这一点的例子:

//在您的Javascript文件中,在您要调用Pickerview或想要推送另一个本机视图的方法内

var iframe = document.createElement("IFRAME"); iframe.setAttribute("src", "js-frame:myObjectiveCFunction"; document.documentElement.appendChild(iframe); iframe.parentNode.removeChild(iframe); iframe = null; 

在Native Objective – C文件中:include << UIWebViewDelegate >>

 - (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType { if ([[[request URL] absoluteString] hasPrefix:@"js-frame:"]) { // Extract the selector name from the URL NSArray *components = [requestString componentsSeparatedByString:@":"]; NSString *functionName = [components objectAtIndex:1]; // Call the given selector [self performSelector:NSSelectorFromString(functionName)]; // Cancel the location change return NO; } // Accept this location change return YES; 

}

 - (void)myObjectiveCFunction { // Do whatever you want! // show Native picker view // Push another native View } 

以同样的方式,您甚至可以将参数从HTML页面发送到Objective c。 // ———————————–