当前位置: 首页 > news >正文

【iOS】——知乎日报第二周总结

文章目录

  • 一、自定义cell内容乱序问题
  • 二、WKWebView加载网页
  • 三、通过cell的协议函数进入指定网页
  • 四、滚动视图左滑加载新的网页
  • 五、隐藏导航栏


一、自定义cell内容乱序问题

当我下拉刷新的时候一开始我自定义的cell的内容顺序没有问题,当我一直下拉刷新或者上滑看以前的内容的时候就会出现乱序的情况,一开始以为是tableView的cell的复用问题,最后用了好久时间调试才发现我给cell赋值的数组有问题,我一开始数组的元素为每天的总的数据,后来改成了每天的分开的五个数据,最后解决了这个问题

 [[Manager sharedSingleton] PreNetWorkGetWithData:^(GetPreModel * _Nullable mainPreModel) {[self.zhihuModel.contentAllPreDataArray addObjectsFromArray:mainPreModel.stories];[self.contentAllDataArray addObjectsFromArray:mainPreModel.stories];} andError:^(NSError * _Nullable error) {//        NSLog(@"往日请求失败");} andURLStr:dateStr];

二、WKWebView加载网页

对于WKWebView我只是掌握了基本的初始化和创建等基本方法,关于一些进阶操作等后面有时间的再学,下面是我的一个测试demo的代码:

 WKWebView* webView = [[WKWebView alloc] initWithFrame:[UIScreen mainScreen].bounds];self.view = webView;NSURL *url = [NSURL URLWithString:@"https:\/\/daily.zhihu.com\/story\/9766643"];NSURLRequest *request = [NSURLRequest requestWithURL:url];[webView loadRequest:request];

运行结果如下;
请添加图片描述

三、通过cell的协议函数进入指定网页

这里我通过- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {}方法,当点击cell时会响应该事件函数,在该事件函数中创建Web的视图控制器并通过属性传值将我网络请求的数据和当前cell的index值传到新创建的视图控制器,在新创建的web视图控制器,我将滚动视图的画布的大小设置成传入的数组的长度与当前屏宽的积,并且将滚动视图的起始坐标设置为index于屏宽的积,这样就是实现点击cell进指定网页

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {MainWebViewController* mainWebViewController = [[MainWebViewController alloc] init];if (indexPath.section == 1) {mainWebViewController.indexValue = indexPath.row;mainWebViewController.indexUrlStr = [self.contentDataArray[indexPath.row] url];} else if (indexPath.section > 1) {mainWebViewController.indexValue = (indexPath.section - 1) * 5 + indexPath.row;mainWebViewController.indexUrlStr = [self.zhihuModel.contentAllPreDataArray[(indexPath.section - 2) * 5 + indexPath.row] url];}//因为今日和昨日是调用两个网络请求,所以不知道哪个更快,这里进行一个判断,如果昨天的更快就将数据进行交换if (self.contentDataArray[0] != self.contentAllDataArray[0]) {for (int i = 0, j = 5; i < 5; i++, j++) {id tmp = 0;tmp = self.contentAllDataArray[i];self.contentAllDataArray[i] = self.contentAllDataArray[j];self.contentAllDataArray[j] = tmp;}}mainWebViewController.webAllDataArray = self.contentAllDataArray;NSLog(@" mainWebViewController.indexValue == %ld",  mainWebViewController.indexValue);mainWebViewController.modalPresentationStyle = UIModalPresentationFullScreen;[self.navigationController pushViewController:mainWebViewController animated:YES];}

四、滚动视图左滑加载新的网页

这里我一开始写的是- (void)scrollViewDidScroll:(UIScrollView *)scrollView方法,然后每次左滑后会让画布的大小增加五个屏宽并加载五个网页,但是运行的时候发现每次左滑都会让画布的大小增加远超过五个屏宽,后来查了一下发现这个方法只要当前坐标超过指定大小就会调用,所以我左滑时会多次调用,后来改成了- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate ,这个方法是当我结束左滑后会判断当前坐标与指定坐标的关系,所以最多只会调用一次

- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate {NSLog(@"进入这个函数");NSLog(@"目前坐标:%f", scrollView.contentOffset.x);NSLog(@"计算宽度:%f", self.webAllDataArray.count * WIDTH - WIDTH);if (scrollView.contentOffset.x >= (self.webAllDataArray.count * WIDTH - WIDTH)) {NSLog(@"进入");NSInteger dateCount = self.webAllDataArray.count;NSDate* urlDate = [[NSDate alloc] initWithTimeIntervalSinceNow:-(dateCount /5 + 1) * 3600 * 24];NSCalendar* gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian];unsigned unitFlags = NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay;NSDateComponents* comp = [gregorian components:unitFlags fromDate:urlDate];NSString* dateStr = [NSString stringWithFormat:@"%ld%ld%ld",comp.year, comp.month, comp.day];[[Manager sharedSingleton] PreNetWorkGetWithData:^(GetPreModel * _Nullable mainPreModel) {//            self.contentPreDataArray = [NSArray arrayWithArray:mainPreModel.stories];[self.webAllDataArray addObjectsFromArray:mainPreModel.stories];NSLog(@"往日获取成功");dispatch_async(dispatch_get_main_queue(), ^{self.mainWebView.mainwebScrollView.contentSize = CGSizeMake(WIDTH * self.webAllDataArray.count, HEIGHT);for (int i = 0; i < 5; i++) {self.mainWebView.mainwebView = [[WKWebView alloc] init];self.mainWebView.mainwebView.frame = CGRectMake(WIDTH * (dateCount + i), 0, WIDTH, HEIGHT);NSString* urlStr = [self.webAllDataArray[dateCount + i] url];NSURL *url = [NSURL URLWithString:urlStr];NSURLRequest *request = [NSURLRequest requestWithURL:url];[self.mainWebView.mainwebView loadRequest:request];[self.mainWebView.mainwebScrollView addSubview:self.mainWebView.mainwebView];}[self.mainWebView.mainwebScrollView setContentOffset:CGPointMake(WIDTH * (dateCount), 0) animated:NO];});} andError:^(NSError * _Nullable error) {//        NSLog(@"往日请求失败");} andURLStr:dateStr];}
}

五、隐藏导航栏

隐藏导航栏就是就是一个简单的方法,但是需要掌握隐藏导航栏的时机,我这里是当我的web视图控制器的视图将要出现是将导航栏隐藏,当视图将要消失的时候再让导航栏出现

- (void)viewWillAppear:(BOOL)animated {[super viewWillAppear:animated];[self.navigationController setNavigationBarHidden:YES animated:animated];
}- (void)viewWillDisappear:(BOOL)animated {[super viewWillDisappear:animated];[self.navigationController setNavigationBarHidden:NO animated:animated];
}

请添加图片描述

相关文章:

  • github搜索技巧探索
  • C++之string
  • 国产CAN总线收发芯片DP1042 兼容替换TJA1042
  • 企业如何安全跨国传输30T文件数据
  • C多维数组指针(学习笔记)
  • Android Glide判断图像资源是否缓存onlyRetrieveFromCache,使用缓存数据,Kotlin
  • 二进制搭建 Kubernetes+部署网络组件+部署CornDNS+负载均衡部署+部署Dashboard
  • 多输入多输出 | Matlab实现k-means-LSTM(k均值聚类结合长短期记忆神经网络)多输入多输出组合预测
  • Postman日常操作
  • Android 中如何使用 App Links
  • React Swiper.js使用(详细版)3D聚焦特效,自定义导航按钮等
  • ZYNQ连载01-ZYNQ介绍
  • 解决:getReader() has already been called for this request
  • Docker-compose和Consul
  • CV计算机视觉每日开源代码Paper with code速览-2023.10.27
  • 2018以太坊智能合约编程语言solidity的最佳IDEs
  • canvas绘制圆角头像
  • Eureka 2.0 开源流产,真的对你影响很大吗?
  • express如何解决request entity too large问题
  • macOS 中 shell 创建文件夹及文件并 VS Code 打开
  • spring学习第二天
  • ⭐ Unity 开发bug —— 打包后shader失效或者bug (我这里用Shader做两张图片的合并发现了问题)
  • vue自定义指令实现v-tap插件
  • 短视频宝贝=慢?阿里巴巴工程师这样秒开短视频
  • 理解 C# 泛型接口中的协变与逆变(抗变)
  • 软件开发学习的5大技巧,你知道吗?
  • 深度学习之轻量级神经网络在TWS蓝牙音频处理器上的部署
  • LIGO、Virgo第三轮探测告捷,同时探测到一对黑洞合并产生的引力波事件 ...
  • 没有任何编程基础可以直接学习python语言吗?学会后能够做什么? ...
  • 如何用纯 CSS 创作一个菱形 loader 动画
  • 资深实践篇 | 基于Kubernetes 1.61的Kubernetes Scheduler 调度详解 ...
  • ​Distil-Whisper:比Whisper快6倍,体积小50%的语音识别模型
  • # 数论-逆元
  • #pragam once 和 #ifndef 预编译头
  • #我与Java虚拟机的故事#连载04:一本让自己没面子的书
  • (0)Nginx 功能特性
  • (C#)Windows Shell 外壳编程系列9 - QueryInfo 扩展提示
  • (二)linux使用docker容器运行mysql
  • (附源码)php投票系统 毕业设计 121500
  • (附源码)spring boot北京冬奥会志愿者报名系统 毕业设计 150947
  • (附源码)小程序儿童艺术培训机构教育管理小程序 毕业设计 201740
  • (小白学Java)Java简介和基本配置
  • (转)Sublime Text3配置Lua运行环境
  • (转)visual stdio 书签功能介绍
  • .net下的富文本编辑器FCKeditor的配置方法
  • @Controller和@RestController的区别?
  • @RunWith注解作用
  • @test注解_Spring 自定义注解你了解过吗?
  • [100天算法】-不同路径 III(day 73)
  • [BT]BUUCTF刷题第4天(3.22)
  • [C#]使用DlibDotNet人脸检测人脸68特征点识别人脸5特征点识别人脸对齐人脸比对FaceMesh
  • [CF226E]Noble Knight's Path
  • [HDU 3555] Bomb [数位DP]
  • [hdu 4552] 怪盗基德的挑战书
  • [Hibernate] - Fetching strategies