Add UIButton in a UIWebView

前端 未结 4 1249
花落未央
花落未央 2021-01-14 18:41

I have a UIWebView which is already filled by my request (loadRequest).

I would like to add a UIButton in it. It\'s easy to write this simple code :

         


        
相关标签:
4条回答
  • 2021-01-14 19:03

    On iOS 5 you can directly access a UIWebView's scroll view, which is where you really want to add your button, https://developer.apple.com/documentation/uikit/uiwebview/1617955-scrollview. But I tend to agree with the previous commenters, you should probably be considering a different approach as mixing UIKit with a web view isn't really meant to work how you describe.

    0 讨论(0)
  • 2021-01-14 19:07

    You can't do this in any sane straightforward way. You may want to reevaluate what you're doing.

    0 讨论(0)
  • 2021-01-14 19:07

    Continuing with axiixc's comment, here is some code that you might use to place a button at the bottom of the webview. By putting the positioning code in layout subviews you can handle rotation properly.

    - (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 讨论(0)
  • 2021-01-14 19:08

    You can inject html markup such as <a href='yourTag01'> <button>My Button </button> </a> into the content of your UIWebview using stringByEvaluatingJavaScriptFromString method.

    To capture the click event and prevent it from reloading content of your webview use this delegate:

    - (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;
    }
    
    0 讨论(0)
提交回复
热议问题