WKWebView行为。图像选择器返回后重新加载

我收到WKWebview的怪异行为。重复出现的问题是,在Web内容请求图像后,应用程序会自动打开图像选择器控制器,并且在选择图像后,WKWebview开始重新加载整个页面,并且我丢失了当前状态,因此图像选择不起作用

wkwebview包含在自定义导航控制器中,而该导航控制器包含在ViewController中。

这是代码的一小部分:

if(isnewProfile)
    _webvc = [[DJTWebViewVC alloc] initWithOutDataObject:_dataUser];
else
    _webvc = [[DJTWebViewVC alloc] initWithDataObject:_dataObject];

CGFloat WEBNAVOFFSET = [self setWebNavOffset];

_webnav = [[DJTWebNavVC alloc] initWithRootViewController:_webvc];
[_webnav.view setframe:CGRectMake(0.0,0.0,c_width,c_height-WEBNAVOFFSET)];

[self.view addSubview:_webnav.view];

从webvc调用图像选择器,它是wkwebview主机。在这里,您可以看到webnav包含webvc,而self.view包含webnav。我想这就是问题所在。有什么方法可以设置应触发图像控制器的视图?还是有人面临这个问题并且有解决方法?

huanhuanelsie 回答:WKWebView行为。图像选择器返回后重新加载

因为问题是调用web view的方式,所以我用来让它工作的解决方案是这样的。首先定义一个全局变量来知道之前是否加载了 web 视图,所以这样初始化它:

@property (nonatomic,assign) BOOL isPreviouslyLoaded;

viewDidLoad 函数中,我添加了以下内容:

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    ...
    
    self.isPreviouslyLoaded = NO;
}

然后在 viewDidAppear 函数中,我以这种方式使用了问题的完整代码:

- (void)viewDidAppear:(BOOL)animated
{
    if(!self.isPreviouslyLoaded){
        [self loadWkWebNavigationController: YES];
        self.isPreviouslyLoaded = YES;
    }
}

最后是加载网页视图的代码:

- (void)loadWkWebNavigationController:(BOOL)isNewProfile
{
    if(isNewProfile)
        _webvc = [[DJTWebViewVC alloc] initWithOutDataObject:nil];
    else
        _webvc = [[DJTWebViewVC alloc] initWithDataObject:nil];
    
    CGFloat WEBNAVOFFSET = [self setWebNavOffset];
    
    _webnav = [[DJTWebNavVC alloc] initWithRootViewController:_webvc];
    [_webnav.view setFrame:CGRectMake(0.0,self.navigationController.navigationBar.bounds.size.height+WEBNAVOFFSET,self.view.bounds.size.width,self.view.bounds.size.height-self.navigationController.navigationBar.bounds.size.height-WEBNAVOFFSET)];
        
    [self.view addSubview:_webnav.view];
    
}

这是我不重新加载以前加载过的视图的方式。

本文链接:https://www.f2er.com/3121927.html

大家都在问