Add UIButton to UIWebView

I have a UIWebView that is already populated with my request (loadRequest).

I would like to add UIButton to it. It is easy to write this simple code:

[self.myWebView loadRequest:request];
[self.myWebView addSubview:myButton];

However, it seems that UIButton will not scroll through the contents of the UIWebView. It remains fixed as a layer on top of the UIWebView. Therefore, when the user scrolls, UIButton receives unsynchronized content.

Any ideas?

+3
source share
4 answers

You can enter html markup, for example <a href = 'yourTag01'> <button> My Button </button> </ ; / > into the contents of your UIWebview using the stringByEvaluatingJavaScriptFromString method.

-, :

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
{
    if(navigationType==UIWebViewNavigationTypeLinkClicked && [[request.URL absoluteString] isEqualToString: @"yourTag01"])
    {
        //your custom action code goes here
        return NO;
    }
    return YES;
}
+9

. , , .

+5
0

Continuing with the axiixc comment, here is some code that you can use to place the button at the bottom of the web view. By placing a positioning code in a layout subsample, you can handle the rotation correctly.

- (void)webViewDidFinishLoad:(UIWebView *)webview{  
    if (!_button){
        UIButton *button = [UIButton buttonWithType:UIButtonTypeSystem];
        [button setTitle:@"Move All Blue Cards to Known" forState:UIControlStateNormal];
        [button setBackgroundImage:[UIImage imageNamed:@"signin-button-blue-color"] forState:UIControlStateNormal];
        [button setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
        button.titleLabel.font = [UIFont boldSystemFontOfSize:16.0];
        [_webview.scrollView addSubview:button];
        _button = button;
    }

    [self setNeedsLayout];
    [self layoutIfNeeded];

}


- (void)layoutSubviews{
    [super layoutSubviews];

    float y = 0;
    CGRect originalRect = _webview.frame;
    _webview.frame = CGRectMake(0, 0, originalRect.size.width, 1); // Trick the webview into giving the right size for content
    CGSize contentSize = _webview.scrollView.contentSize;
    _webview.frame = originalRect;
    if (contentSize.height < _webview.frame.size.height){ // This keeps the button at the bottom of the webview, or at the bottom of the content, as needed.
        y = _webview.frame.size.height - 64; // 44 tall + 20 offset from the bottom
    } else {
        y = contentSize.height + 20;
    }

    _button.frame = CGRectMake(20, y, self.frame.size.width-40, 44); // 40/2 = 20 px on each side
    contentSize.height = CGRectGetMaxY(_button.frame)+20;
    _webview.scrollView.contentSize = contentSize;    
}
0
source

All Articles