2012-06-26 29 views
3

我试图将我的原生iOS应用程序转换为使用HTML 5的混合应用程序。 完成研究后,我以结束了jQuery mobile + phoneGap。HTML 5 + iOS - 创建混合应用程序

我的问题是

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

在此先感谢

+0

1 - 可能的,但iOS功能将在网络视图顶部2 - 可能的,但你必须确保网络视图不卸载 – nhahtdh

+0

@nhahtdh感谢您的答复。 你可以建议我一些关于上述主题的教程。 –

+0

检查是否存在可以使用或修改的插件。否则,我认为你必须编写自己的插件。 – nhahtdh

回答

7
  1. 是的,你可以在一台 '视图' 中混用机iOS功能。如果您想将本机iOS选取器插入网络视图,那不太可能。正如nhahtdh提到的那样,您添加的任何本机iOS视图都将放置在HTML5 UIWebView的顶部。要执行这样的任务,您需要通过Javascript掌握通信。有关如何轻松在ObjC和Javascript之间进行通信以在native和HTML之间来回传递值的技术,请参阅框架https://github.com/diy/conduit

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

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

+0

对于2),您还可以扩展UIWebView的委托功能,并定义您自己的协议以表示xib的负载(与Cordova在内部的负载相同)。 – nhahtdh

+0

我可以使用childBrowser插件将xib加载到应用程序中吗? –

1

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

//在你的JavaScript文件,里面的方法:在你想要调用Pickerview或要推另一本地视图

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

您的母语的Objective - C文件:包括< < 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。 // -----------------------------------

+0

嗨,我是iOS新手。作为新手,我已经完成了创建混合应用程序的任务。我一般在Android工作。对于Hybrid Android,我将HTML文件,JS和CSS文件放入文件夹并从容器中调用html文件。在这种情况下,在iOS中,你能告诉我在哪里可以放置HTML文件并给我打电话。如果你有任何演示,你可以告诉我吗? – Debopam

相关问题