WebViewの下部にUIButtonを追加しようとしています。これを達成する最良の方法は何でしょうか?Iphone:UIWebViewの下部に「フッター」を追加する
私はwebviewをtableviewに入れてから、footerをtableviewに追加することを考えていますが、もっと簡単な解決方法があると思っています。
WebViewの下部にUIButtonを追加しようとしています。これを達成する最良の方法は何でしょうか?Iphone:UIWebViewの下部に「フッター」を追加する
私はwebviewをtableviewに入れてから、footerをtableviewに追加することを考えていますが、もっと簡単な解決方法があると思っています。
サブビューとしてUIWebView
とUIButton
を追加し、UIView
を作成します。
UIView
UIWebView
UIButton
をyの場合フッターをWebビューのコンテンツに従わせたい場合は、UIScrollViewDelegateを使用する必要があります。
いくつかのトリックがあります。
を解放するときは、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:)];
}
}
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
)として記録することでこれを行いますが、それをプロパティとして簡単に保存することもできます。
このコードを使用して、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)];
http://stackoverflow.com/questions/36656328/uiwebview-with-header-and-footer/38118077#38118077 – MCMatan