2011-09-16 10 views
0

WebViewの下部にUIButtonを追加しようとしています。これを達成する最良の方法は何でしょうか?Iphone:UIWebViewの下部に「フッター」を追加する

私はwebviewをtableviewに入れてから、footerをtableviewに追加することを考えていますが、もっと簡単な解決方法があると思っています。

+0

http://stackoverflow.com/questions/36656328/uiwebview-with-header-and-footer/38118077#38118077 – MCMatan

答えて

1

サブビューとしてUIWebViewUIButtonを追加し、UIViewを作成します。

  • UIView
    • UIWebView
    • UIButton
0

をyの場合フッターをWebビューのコンテンツに従わせたい場合は、UIScrollViewDelegateを使用する必要があります。

いくつかのトリックがあります。

  1. UIWebViewでUIScrollViewを取得します。今iOS5ではずっと簡単です。
  2. UIScrollViewの代理人を代理人に設定します。
  3. 代理人は、すべてのmsgをUIScrollViewDelegate からUIWebViewに渡す必要があります。
  4. 変更 でcontentOffsetに応じて、あなたのフッターの位置UIScrollViewの
  5. あなたがのUIWebView

を解放するときは、UIScrollViewDelegate

からMSGをパススルーするには、次のコードを追加することができ、デリゲート値を復元します。
- (void)scrollViewDidScroll:(UIScrollView *)scrollView { 
     // layout your footer here 
    [self layoutAccessoryViews:scrollView]; 
    if([scrollViewPassthrough_ respondsToSelector:@selector(scrollViewDidScroll:)]) { 
     [scrollViewPassthrough_ scrollViewDidScroll:scrollView]; 
    } 
} 
              // any offset changes 
- (void)scrollViewDidZoom:(UIScrollView *)scrollView { 

    if([scrollViewPassthrough_ respondsToSelector:@selector(scrollViewDidZoom:)]) { 
     [scrollViewPassthrough_ scrollViewDidZoom:scrollView]; 
    } 
} 

// called on start of dragging (may require some time and or distance to move) 
- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView { 

    if([scrollViewPassthrough_ respondsToSelector:@selector(scrollViewWillBeginDragging:)]) { 
     [scrollViewPassthrough_ scrollViewWillBeginDragging:scrollView]; 
    } 
} 

// called on finger up if the user dragged. velocity is in points/second. targetContentOffset may be changed to adjust where the scroll view comes to rest. not called when pagingEnabled is YES 
- (void)scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffset { 

    if([scrollViewPassthrough_ respondsToSelector:@selector(scrollViewWillEndDragging:withVelocity:targetContentOffset:)]) { 
     [scrollViewPassthrough_ scrollViewWillEndDragging:scrollView withVelocity:velocity targetContentOffset:targetContentOffset]; 
    } 
} 

// called on finger up if the user dragged. decelerate is true if it will continue moving afterwards 
- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate { 

    if([scrollViewPassthrough_ respondsToSelector:@selector(scrollViewDidEndDragging:willDecelerate:)]) { 
     [scrollViewPassthrough_ scrollViewDidEndDragging:scrollView willDecelerate:decelerate]; 
    } 
} 

- (void)scrollViewWillBeginDecelerating:(UIScrollView *)scrollView { 

    if([scrollViewPassthrough_ respondsToSelector:@selector(scrollViewWillBeginDecelerating:)]) { 
     [scrollViewPassthrough_ scrollViewWillBeginDecelerating:scrollView]; 
    } 
} 

- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView { 

    if([scrollViewPassthrough_ respondsToSelector:@selector(scrollViewDidEndDecelerating:)]) { 
     [scrollViewPassthrough_ scrollViewDidEndDecelerating:scrollView]; 
    } 
} 

- (void)scrollViewDidEndScrollingAnimation:(UIScrollView *)scrollView { 

    if([scrollViewPassthrough_ respondsToSelector:@selector(scrollViewDidEndScrollingAnimation:)]) { 
     [self scrollViewDidEndScrollingAnimation:scrollView]; 
    } 
} 

- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView { 

    if([scrollViewPassthrough_ respondsToSelector:@selector(viewForZoomingInScrollView:)]) { 
     return [scrollViewPassthrough_ viewForZoomingInScrollView:scrollView]; 
    } 
    return nil; 
} 

- (void)scrollViewWillBeginZooming:(UIScrollView *)scrollView withView:(UIView *)view { 

    if([scrollViewPassthrough_ respondsToSelector:@selector(scrollViewWillBeginZooming:withView:)]) { 
     [scrollViewPassthrough_ scrollViewWillBeginZooming:scrollView withView:view]; 
    } 
} 

- (void)scrollViewDidEndZooming:(UIScrollView *)scrollView withView:(UIView *)view atScale:(float)scale { 

    if([scrollViewPassthrough_ respondsToSelector:@selector(scrollViewDidEndZooming:withView:atScale:)]) { 
     [scrollViewPassthrough_ scrollViewDidEndZooming:scrollView withView:view atScale:scale]; 
    } 
} 

- (BOOL)scrollViewShouldScrollToTop:(UIScrollView *)scrollView { 

    if([scrollViewPassthrough_ respondsToSelector:@selector(scrollViewShouldScrollToTop:)]) { 
     [scrollViewPassthrough_ scrollViewShouldScrollToTop:scrollView]; 
    } 
    return YES; 
} 

- (void)scrollViewDidScrollToTop:(UIScrollView *)scrollView { 

    [self layoutAccessoryViews:scrollView]; 
    if([scrollViewPassthrough_ respondsToSelector:@selector(scrollViewDidScrollToTop:)]) { 
     [scrollViewPassthrough_ respondsToSelector:@selector(scrollViewDidScrollToTop:)]; 
    } 
} 
1

webView.scrollView.contentSizeでKVOを使用して解決策を見つけました。

私はhttp://objectivesea.tumblr.com/post/58540464993/adding-a-footer-to-uiwebviewここでそれについてブログきたし、必要なすべてのコードは、このコミットで見つけることができます:https://github.com/coryalder/DMAFWebViewController/commit/07032756f3e72f62f86b077319c44d3f5d7cab6d

は基本的に、あなたは変化をcontentSizeを見て、それが変更されたとき、あなたはfooterView.heightでcontentSizeを高め、 footerViewにフレームを設定して、scrollViewの下部に配置します。これは、再帰的なcontentSize呼び出しを監視する必要があることに注意してください。私は、ターゲットのcontentSizeをassociatedObject(objc_setAssociatedObject)として記録することでこれを行いますが、それをプロパティとして簡単に保存することもできます。

1

このコードを使用して、webviewの下部にボタンを追加します。

CGSize size = webView.scrollView.contentSize; 

button.frame = CGRectMake(button.frame.origin.x, size.height, button.frame.size.width, button.frame.size.height); 
[webView.scrollView addSubview:button]; 
[webView.scrollView setContentSize:CGSizeMake(size.width, size.height + button.frame.size.height)]; 
関連する問題