ios – WKWebView *** 作表在被解雇后解除显示视图控制器

ios – WKWebView *** 作表在被解雇后解除显示视图控制器,第1张

概述我有一个嵌入在NavigationController中的视图控制器(WKWebViewController).这个ViewController提供了一个WKWebView.导航到任何网页后;并且在长按任何检测到的内容(例如电话号码或链接)时,会显示一个 *** 作表,其中包含复制,共享等选项.问题是当此 *** 作表被取消时,WKWebViewController将被解除,并且显示根ViewController 我有一个嵌入在NavigationController中的视图控制器(WKWebVIEwController).这个VIEwController提供了一个WKWebVIEw.导航到任何网页后;并且在长按任何检测到的内容(例如电话号码或链接)时,会显示一个 *** 作表,其中包含复制,共享等选项.问题是当此 *** 作表被取消时,WKWebVIEwController将被解除,并且显示根VIEwController!无论选择是什么,它都可以复制,取消,甚至可以点击屏幕上的任何位置.

我已经尝试重写“现在(_ vIEwControllertopresent:UIVIEwController,动画标志:Bool,完成:(() – > VoID)?= nil)”和“dismiss(动画标志:Bool,完成:(() – > VoID)?)“试图理解发生了什么,但后来意识到动作表没有呈现,既没有被其父视图控制器(WKWebVIEwController)解雇,事实上我在根视图控制器上做了同样的事情并且发现它既没有出现在它上面.

我已经做了很多搜索,试图了解是什么导致了这种行为,我甚至用一个简单的WKWebVIEw构建了一个新项目,并且总是遇到同样的问题.

这是代码:

import UIKit; import WebKitclass WKWebVIEwController: UIVIEwController,WKUIDelegate,WKNavigationDelegate {var destinationUrlString: String?var myWebVIEw: WKWebVIEw!overrIDe func vIEwDIDLoad() {    super.vIEwDIDLoad()    let webConfiguration = WKWebVIEwConfiguration()    webConfiguration.dataDetectorTypes = []    let origin = CGPoint(x: 0,y: 0)    let size  = CGSize(wIDth: vIEw.frame.size.wIDth,height: vIEw.frame.size.height)    myWebVIEw = WKWebVIEw(frame: .init(origin: origin,size: size),configuration: webConfiguration)    myWebVIEw.uIDelegate = self    myWebVIEw.navigationDelegate = self    myWebVIEw.allowslinkPrevIEw = false    vIEw = myWebVIEw    destinationUrlString = "https://www.stackoverflow.com"    guard let url = URL(string: destinationUrlString!) else {return}    print(url)    let request = URLRequest(url: url)    myWebVIEw.load(request)}func webVIEw(_ webVIEw: WKWebVIEw,dIDStartProvisionalNavigation navigation: WKNavigation!) {    //show progress indicator}func webVIEw(_ webVIEw: WKWebVIEw,dIDFinish navigation: WKNavigation!) {    //dismiss progress indicator}func webVIEw(_ webVIEw: WKWebVIEw,dIDFail navigation: WKNavigation!,withError error: Error) {    //show error}func webVIEw(_ webVIEw: WKWebVIEw,dIDFailProvisionalNavigation navigation: WKNavigation!,withError error: Error) {    //show error}}

我还附上了一个显示问题的GIF:

我正在使用Xcode 9.3(9E145)和Swift 4.1.

我错过了什么吗?怎么解决这个问题?
任何帮助将非常感激.

解决方法 我遇到了同样的问题.

为了处理这种情况,在UIVIEwController层次结构的根视图控制器中(在你的情况下,这将是“根视图控制器” – 注意,在许多情况下,它可能是你必须子类的UINavgiationController)覆盖dismissVIEwControllerAnimated :完成:多次处理WKWebVIEw调用dismiss.

Objective-C的

@property (weak) UIVIEwController *lastPresentedController;- (voID)dismissVIEwControllerAnimated:(BOol)flag completion:(voID (^)(voID))completion{    // WKWebVIEw actions sheets workaround    if (self.presentedVIEwController && self.lastPresentedController != self.presentedVIEwController ) {        self.lastPresentedController = self.presentedVIEwController;        [self.presentedVIEwController dismissVIEwControllerAnimated:YES completion:^{            if( completion ) {                completion();            }            self.lastPresentedController = nil;        }];    } else if( !self.lastPresentedController) {        [super dismissVIEwControllerAnimated:flag completion:completion];    }}

迅速

private weak var lastPresentedController : UIVIEwController?overrIDe func dismiss(animated flag: Bool,completion: (() -> VoID)? = nil) {    // WKWebVIEw actions sheets workaround    if presentedVIEwController != nil && lastPresentedController != presentedVIEwController  {        lastPresentedController = presentedVIEwController;        presentedVIEwController?.dismiss(animated: flag,completion: {            completion?();            self.lastPresentedController = nil;        });    } else if lastPresentedController == nil {        super.dismiss(animated: flag,completion: completion);    }}
总结

以上是内存溢出为你收集整理的ios – WKWebView *** 作表在被解雇后解除显示视图控制器全部内容,希望文章能够帮你解决ios – WKWebView *** 作表在被解雇后解除显示视图控制器所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1115096.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-29
下一篇 2022-05-29

发表评论

登录后才能评论

评论列表(0条)

保存