UIWebView委托不会在自定义类中触发

时间:2018-05-17 00:15:22

标签: ios swift delegates

我花了大约5个小时在StackOverFlow上搜索有关如何实现这一点的方法,但我还没有找到解决方案!

我创建了一个新的iOS Swift应用程序,只是为了向您解释我到底想要解决的问题。

首先,我在主故事板上有UIButton,当您点击它时,它会从类WebViewAsPopup创建一个新对象,该对象以编程方式创建新WebView,背景为{ {1}}使用alpha 0.5,添加一些样式,然后将它们作为弹出窗口添加到主视图控制器UIView

其次,我无法为那些ViewController设置代理来处理WebView's并同时收听UIWebViewDelegatewebViewDidStartLoad

这是我的代码:

webViewDidFinishLoad

ViewController.swift

// // ViewController.swift // MySimpleApp // import UIKit class ViewController: UIViewController { @IBOutlet weak var showPopupBtn: UIButton! override func viewDidLoad() { super.viewDidLoad() } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } @IBAction func showPopupTapped(_ sender: Any) { let popup = WebViewAsPopup() popup.showWebViewPopup(on: self) } }

WebViewAsPopup.swift

1 个答案:

答案 0 :(得分:2)

正如我在评论中提到的,您需要将弹出对象保存在某处以便保留它。如果不是(如示例代码中所示),则只要操作方法showPopupTapped(_:)完成,它就会被释放。

试试这个:

import UIKit

class ViewController: UIViewController {

    @IBOutlet weak var showPopupBtn: UIButton!

    let popup = WebViewAsPopup()

    @IBAction func showPopupTapped(_ sender: Any) {
        self.popup.showWebViewPopup(on: self)
    }

}

奖金注意:

如果您想知道为什么不需要对弹出对象中的背景视图和网页视图执行相同的操作,那是因为视图会自动保留其子视图。

因此,一旦您将背景视图和Web视图作为子视图添加到父视图,它们的保留计数就会上升并将在当前范围内保留。