2009-07-25 9 views
9

UIWebViewの下に2つのコントロール(いくつかのUIButtonなど)を追加する最も簡単な方法、最も速い方法、または他の方法(客観的に)UIWebViewの下にコントロールを追加する方法

私は通常のスクロールUIWebViewを表示したいと思いますが、スクロールが下に達すると、Webコンテンツの後にUIControlsがいくつかあるようにしたいと思います。私はむしろコントロールのようなHTML/CSSコンテンツでそれを偽造してはいけません。理想的には、彼らはいつものように私のビューコントローラに接続することができる実際のコントロールでなければなりません。

UIWebViewとコントロールの両方を含む大きなUIScrollView(UIScrollViewとネストされたUIWebViewの間にスクロールの競合がありますか?)を含むUITableViewを使用すると、これを行うのが最も簡単かどうか分かりません。ウェブビューとコントロールを別々のセルで(パフォーマンスはひどくなるでしょうか?)、あるいは私が考えていない他の方法で実行します。

更新:UIWebView自体を実際にスクロールさせたいとは思いません。私はすべてのコンテンツを収容するためにサイズを変更し、そのスクロール動作を完全に無効にし、UIWebViewのさまざまな部分を表示するために親ビュー(UIScrollViewまたはUITableView)をスクロールできるようにする必要があると考えました。

+0

私は、HTMLやCSSでそれを偽造してしまいました。 -webkit-appearance:プッシュボタンはこれをより美味しくする。 「1つの大きなUIWebView」アプローチの問題は、ビューの最大サイズが1024x1024ピクセルであるため、必ずしもページ全体を1つに読み込んでUIScrollView内に張り付けることはできません。大きなページを小さなページに切り詰めて、各パーツごとに別々のUIWebViewを使用することは可能ですが、これは実際のページコンテンツの一部にボタンを加えることよりも悪い解決策のようです。 –

答えて

8

提案したUIScrollViewソリューションとUITableViewソリューションはどちらも機能しません。

UIWebViewをUIScrollViewに配置すると、一方または両方がスクロールをインターセプトしてコンテンツペインをスクロールしますが、他方はスクロールしません。私はどちらが、私はそれがUIScrollViewだろうと思うか分からない。いずれにしても、UIScrollViewがUIWebViewのスクロールの終わりに達したときにスクロールする機能はありません。またその逆もあります。

UITableViewを使用すると、UIWebViewはセル内をスクロールしますが、UITableViewはまったくスクロールしません。そうしないと、UIWebViewはまったくスクロールせず、UITableViewが実行されます。 'grouped'テーブルスタイルを使用すると、UIWebViewとUITableViewをスクロールできる可能性がありますが、それはあなたが探している密接なものではありません。

私が考えることができる唯一の技術は、UIWebViewの内部でうんざりしてUIWebViewで使用されるスクロールするエンティティにボタンやその他のものを含むUIViewを追加することです。これは私のケンを超えていますが、these header dumps will get you started.あなたが行っていることにAppleが気づいた場合、あなたのアプリを拒否することがあります。また、内部はいつでも変更されてコードが破損する可能性があります。このルートに行く場合は、欠落している機能が正常に機能しなくなるような方法でコードを作成してください。

EDIT:

いくつかの議論や実験、OPで

と私はそれが非常に可能であり、すべての内部に依存しない、それを行う方法があるという結論になってきました。つまり、囲みスクロールビューを使用し、Webビューが独自のコンテンツビューのフルサイズにロードされると、そのサイズを変更します。このサイズは[webView sizeThatFits:CGSizeZero]を使って見つけることができます。あなたはこれを実現するためのUIWebViewの陰部を使用したいなかった場合

は、私はとにかく:)働い

- (void)applicationDidFinishLaunching:(UIApplication *)application {  

    // Override point for customization after app launch 
    UIView* testView = [[[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 480)] autorelease]; 
    UIWebView* testWebView = [[[UIWebView alloc] initWithFrame:CGRectMake(0, 0, 320, 480)] autorelease]; 
    [testView addSubview:testWebView]; 
    [testWebView setDelegate:self]; 
    [testWebView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://google.com"]]]; 



    [window addSubview:testView]; 
    [window makeKeyAndVisible]; 
} 
- (void)webViewDidFinishLoad:(UIWebView *)webView { 
    UIView *insert = [[[UIView alloc] initWithFrame:CGRectMake(0, [[webView _documentView] frame].size.height, 320, 40)] autorelease]; 
    [insert setBackgroundColor:[UIColor greenColor]]; 
    [[webView _documentView] addSubview:insert]; 
} 
+0

包括的で思慮深い答えをありがとう。私はUIWebView自体をスクロールさせたくありません:私はそれがすべてのコンテンツ(すなわちいくつかの画面が高い)を表示するのに十分な大きさにサイズ変更し、親ビューをスクロールして大きなUIWebView(そして結局その下のコントロール)。達成できないのでしょうか? –

+0

実際には達成可能かもしれません。あなたは、(scalesPageToFit = NOで)リクエストをロードし、ページの高さを調べ、それに合わせてすべてのものを自分のUIScrollViewの内容の中に再レイアウトする必要があります。私が見る唯一の問題は、ページの実際の高さを知ることです。それ自体は、内部についてうんざりするかもしれません。 UIWebViewはコンテンツの表示方法を知っていますが、あなたに伝えるための簡単な方法はわかりません。私は今、いくつかのテストコードを手にしています。私はそれがどのようになっているかを教えてくれるでしょう。 –

+0

ブリリアント。再度、感謝します。 [webView sizeThatFits:CGSizeZero]はそのトリックをしませんか? (http://www.iphonedevsdk.com/forum/iphone-sdk-development/1388-getting-actual-content-size-uiwebview.html) –

1

パブリックSDKの制約内でこれを行う方法はないと思います。

+0

ああああ。大きなUIScrollViewもUITableViewも機能しませんか?何故なの? –

0

これを私はそれをすべて持っているので、のUIWebViewのドキュメントビューにビューを追加する短いコード例を持っています私はそれをどうやって行うのですか?

- (void)webViewDidFinishLoad:(UIWebView *)webView { 


for(UIView *view in [webView subviews]){ 

    if([view isKindOfClass:[UIScrollView class]]){ 
     NSLog(@"Scrollview found with tag %d", [view tag]); 

     UIScrollView *scroll= (UIScrollView *)view; 
     [scroll addSubview:self.finishBtn]; 
     [finishBtn setCenter:CGPointMake(webView.center.x, scroll.contentSize.height-30)]; 
    } 


} 

}

関連する問題