3

HTML 5 を使用してネイティブ iOS アプリをハイブリッド アプリに変換しようとしています。調査を行った後、jQuery mobile + phoneGap になりました。

私の質問は

  1. 単一のビュー内で HTML 5 とネイティブの iOS 機能を混在させることはできますか? たとえば、html テキスト フィールドを使用して値を取得し、それを使用して iOS ピッカーを使用して変換を行うことができます。
  2. HTML ページからネイティブの xib に移動することは可能ですか?
  3. 最後に、ハイブリッド アプリを作成するためのより良いソリューションはありますか?

前もって感謝します

4

2 に答える 2

7
  1. はい、単一の「ビュー」内にネイティブiOS機能を混在させることができます。ネイティブiOSピッカーをWebビューに挿入しようとしている場合、それは実際には不可能です。nhahtdhが述べたように、追加するネイティブiOSビューは、HTML5UIWebViewの上に配置されます。このようなタスクを実行するには、Javascriptを介した通信をマスターする必要があります。ObjCとJavascriptの間で簡単に通信して、ネイティブとHTMLの間で値をやり取りする方法については、https://github.com/diy/conduitなどのフレームワークを参照してください。

  2. 特定のURLリクエストを監視するようにiOSアプリを設定し、それらに基づいて何らかのアクションを実行することにより、HTMLページからナビゲーションを実行することができます(たとえば、リンクをクリックする場合)。私はこの目的のためにNSURLCacheを使用しました。したがって、HTML内のリンクでxibファイルのロードをトリガーする場合は、そのURLがNSURLCacheを介して要求されるのを監視し、それが表示されたらxibをロードできます。このリンクは、私がこのテクニックを習得するのに役立ちました。

  3. すべてのハイブリッドiOS+HTMLフレームワークは、NSURLCacheのようなシステムで解析してそれらのURLに基​​づいてネイティブイベントをトリガーできるRESTのようなURLリクエストのセットを確立するこの一般的な手法を使用していることを理解しています。既存のフレームワークを使用すると時間を節約できる場合がありますが、より単純な機能を実装することはそれほど難しくありません。ただし、大きなフレームワークは、HTMLリソースのより高度なキャッシュとともに役立つ可能性があります。

于 2012-06-26T06:44:05.793 に答える
1

私はここで遅れているかもしれませんが、最初の 2 つの質問の答えは「はい」です。コードを表示し、他のビューをナビゲート/プッシュするピッカーを持つObjective Cメソッドを、Javascriptを持つWebから呼び出すことができます。UIWebViewDelegate を使用して、ネイティブ アプリでそれらを追跡するだけです。これが私がこれを行った方法の例です:

// Javascript ファイルで、Pickerview を呼び出したい、または別のネイティブ ビューをプッシュしたいメソッド内

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

ネイティブの目的 - 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 にパラメータを送信することもできます。// -----------------------------------

于 2012-09-21T09:46:41.777 に答える