昨天和今天在继续制作我的健康养生项目。
1.在主页、知识两个界面给tableview赋上数据。
2.完善了一下夜间模式,修改了switch按钮的初始状态判断。
3.主页,知识两个界面点击cell后跳转到新的控制器,添加WKWebView,加载网页url。
4.加载网页,使用MBProgressHUD框架。在网页没加载完成时显示加载界面,网页加载完成后关闭加载界面。
WKWebView的代理有两种,UIDelegate和navigationDelegate两种,分别要遵循<WKUIDelegate>和<WKNavigationDelegate>。
1.这里我用到的是navigationDelegate,简单的学习了解了一下两种代理。
navigationDelegate主要是捕获webView的各种状态,例如判断是否可以加载该网页,开始加载网页,加载完成,加载中断等等,调用不同的方法就可以捕获不同的状态,并在方法里完成自己的操作。
UIDelegate简略地看了一下,都是关于与js交互的方法,现在暂时用不到。
这两种代理设置的时候没什么说的,就照常一样。webView.UIDelegate = self; 和 webView.navigationDelegate = self; 即可。
2.然后简单的用了一下MB框架。
-- (void)viewDidLoad {
MBProgressHUD *HUB = [MBProgressHUD showMessage:@"玩命加载中..."];
HUB.delegate=self;
}
//网页加载完成-代理方法navigationDelegate
- (void)webView:(WKWebView*)webViewdidFinishNavigation:(WKNavigation*)navigation{
[MBProgressHUD hideHUD];
}
//代理方法-MBProgressHUDDelegate(这里监听HUD状态,如果隐藏了就将其移除,置空)
-(void)hudWasHidden:(MBProgressHUD *)hud{
[hudremoveFromSuperview];
hud =nil;
}
这里说一下自己犯的一个小错误,之前将HUD框架的showMassage方法写在了viewWillAppear方法中了,导致出现了一个小bug,就是第一次加载网页的时候,正常显示加载提示,加载完成就消失了。待点击tabbar切换控制器后再回来的时候,又会显示加载框,又因为第二次不用重新加载网页,监听网页加载完成的代理方法不会被调用,写在里面的取消提示框也不会执行,提示框就会一直显示,卡在那里。
以后要注意写在viewDidLoad方法中就没事了。
3.又发现了个问题,因为app里有些界面是加载网页的,个人界面中有一个table是显示缓存大小的,之前没加载网页的时候没有发现问题,加载网页之后,缓存数飞速增长,导致切换到个人界面的时候会卡住几秒,个人猜测是缓存越来越大,主线程阻塞,计算时间过长,导致UI界面加载慢。
解决方法:由于计算缓存大小的操作是在自定义的cell中实现的,没有计算完成,就不会加载UI界面,于是在自定义cell类中将计算缓存的操作放入子线程中执行,切换界面的时候就恢复流畅了。
注意点,只能将计算过程放入子线程中,给label赋值的步骤一定要放在主线程中。