如何在UIWebView上叠加UIButton(关闭)按钮?

时间:2016-05-13 07:57:20

标签: ios swift uiwebview

我一直在寻找并试图用UIWebView for iOS解决一个问题。

我有一个非常小的应用程序,它只是加载我的网站,源代码位于https://github.com/pjuu/iotter

在用户点击已发布图片的网站上,它会将图片网址加载到网络视图中。这使他们陷入困境,无法回到网站的其他部分。

我想要做的是在右上角显示一个(x)按钮(无论正在使用什么屏幕旋转),并在浏览器中执行后退操作。

我知道这个问题不是代码问题,因为我可以对其中的Swift代码部分进行排序。我无法为我的生活找到如何以编程方式添加按钮并将其显示在webview上。

我能找到的唯一教程包括创建一个工具栏来执行这些类型的操作,我认为在查看图像时会占用很多空间。

问题很简单:

  • 这可能吗?
  • 如果是这样,我将如何创建按钮?

我将使用正则表达式检查request.path参数,只有在与图片网址匹配时才会显示。

如果这不适合SO,请道歉。我很乐意将问题或帖子移到另一个网站上。

提前感谢您的帮助。我不是移动开发人员,所以使用XCode和故事板的东西对我来说远离vim。

2 个答案:

答案 0 :(得分:7)

<强>参考:

1)CGRectMake:https://developer.apple.com/library/ios/documentation/GraphicsImaging/Reference/CGGeometry/#//apple_ref/c/func/CGRectMake

2)UIWebViewDelegate: https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIWebViewDelegate_Protocol/#//apple_ref/occ/intfm/UIWebViewDelegate/webView:shouldStartLoadWithRequest:navigationType

<强> SOLUTION:

1)创建&#34; X&#34;的UIButton:

// Define the UIButton

let button   = UIButton(type: UIButtonType.System) as UIButton
let image = UIImage(named: "name") as UIImage?
button.frame = CGRectMake(self.view.frame.width - 60, 30, 35, 35)
button.setTitle("Test Button", forState: UIControlState.Normal)
button.setImage(image, forState: .Normal)
button.addTarget(self, action: "buttonAction:", forControlEvents: UIControlEvents.TouchUpInside)

self.view.addSubview(button)

//Hide the UIButton

button.hidden = true

2)检测imageUrl何时打开并生成&#34; X&#34; UIButton出现:

// This function is triggered every time a request is made:

optional func webView(webView: UIWebView, shouldStartLoadWithRequest request: NSURLRequest, navigationType: UIWebViewNavigationType) -> Bool {
    let string = request.URL

    if string.rangeOfString(".png") || string.rangeOfString(".jpg")|| string.rangeOfString(".jpeg"){
        // code to make cross appear
        // for example:
        self.button.hidden = false
    }
}

3)最后,您需要创建一个关闭页面的方法,当&#34; X&#34; UIButton被点击:

func btnPressed(sender: UIButton!) {
    if(webview.canGoBack) {
        //Go back in webview history
        webview.goBack()
    } else {
        //Pop view controller to preview view controller
        self.navigationController?.popViewControllerAnimated(true)
    }
}

<强> N.B:

在行中:

let image = UIImage(named: "cross.png") as UIImage?
button.setImage(image, forState: .Normal)

我们将UIButton设置为十字架的图像。 您需要将十字图像添加到XCode项目并设置&#34; cross.png&#34;字符串到图像的确切名称:&#34; nameOfImage.fileType&#34;。

答案 1 :(得分:0)

简单的一线解决方案。

在情节提要中或以编程方式创建所需的“关闭”按钮。

然后,只需将WebView发送到视图控制器中显示的所有当前视图的后面:

view.sendSubviewToBack(yourWebView)

现在,所有视图(包括您创建的任何按钮)将显示在顶部。只要确保在创建所有所需视图后添加此行即可。