首页 > 解决方案 > Swift 5,无法显示此文本

问题描述

当我有一个尝试连接到网络的进程并且在尝试加载网页之前,我试图在 iPhone 上显示一些文本。在主 ViewController 我尝试了以下但未显示:

    @IBOutlet var mWebKit: WKWebView!

let myURL = URL(string: "https:theurl.com")

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view.
    let request = URLRequest(url: myURL!)
    mWebKit.navigationDelegate = self  // Start monitor WebKit output
    
    let testlabel = UILabel(frame: CGRect(x: 0, y: 0, width: mWebKit.frame.size.width, height: mWebKit.frame.size.height))
    testlabel.textAlignment = .center
    testlabel.font = UIFont(name: "Helvetica-Bold", size: 32)
    testlabel.textColor = .red
    testlabel.text = "TESTING"
    mWebKit.addSubview(testlabel)

    CheckVPNConnetionLoop()  
    testlabel.removeFromSuperview()
    mWebKit.load(request) // load page
}

因此,当应用程序加载时 VPN 需要一段时间才能在 iPhone 上连接时,CheckVPNConnectionLoop() 可能会在放弃之前运行 6 秒或更长时间。想要在之前有一些文字或我的微调器显示并在之后消失。但是在手机上运行它时我看不到内容。在模拟器上它的工作方式完全不同,所以不会依赖它。有什么想法我做错了吗?

标签: swift

解决方案


认为它正在工作,但是当我放回 removefromsuperview 时,它并不是那么认为 jnpdx 是正确的。我基本上在那个 CheckVPNConnectionLoop 中循环,如果它没有连接,每次运行它会打盹 3 秒钟,然后再试一次。里面有什么:

func checkConnection(completionHandler:@escaping (_ isOnline: Bool?) -> Void){
    let stringurl = "http://" + "<ip>"
    let url = NSURL(string: stringurl)
    let task = URLSession.shared.dataTask(with: url! as URL) {(data, response, error) in
        let httpResponse = response as? HTTPURLResponse
        if (httpResponse?.allHeaderFields["Date"] as? String) != nil {
            let isConnected = true
            completionHandler(isConnected)
        }else{
            let isConnected = false
            completionHandler(isConnected)
        }
    }
    task.resume()
}

也就是说,在这个过程完成如此混乱之前,我不会根据我的判断调用 webview。


推荐阅读