【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];
}

请添加图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/123049.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mac电脑视频处理推荐:达芬奇DaVinci Resolve Studio 18 中文最新

DaVinci Resolve Studio 18是一款专业的视频编辑、调色和后期制作软件&#xff0c;由Blackmagic Design开发。它被广泛应用于电影、电视和广告等行业&#xff0c;提供了全面的工具和功能&#xff0c;使用户能够进行高质量的影片制作和后期处理。 以下是DaVinci Resolve Studio…

【QML】vscode安装QML格式化插件方法

1. 安装插件 拓展 > 搜索qml > 找到QML Format >点击安装 2. 配置 打开settings.json文件 ctl shift p&#xff0c;然后搜索settings 修改settings.js内容 {...//添加以下内容// 根据自己电脑安装路径来填写qmlformat.exe的路径&#xff0c;注意转义符"\…

数字孪生与智慧城市:开启未来智慧生活

在数字时代的浪潮中&#xff0c;数字孪生技术和智慧城市的理念相互交织&#xff0c;共同塑造了一个更智能、更可持续、更宜居的未来。数字孪生是一项前沿技术&#xff0c;将虚拟世界与现实世界相融合&#xff0c;为城市管理者和市民带来了前所未有的机遇和便捷。 数字孪生模型是…

redis集群中节点fail,noaddr

文章目录 1. 问题&#xff1a;fail,noaddr2. cluster nodes节点信息解读2.1 每个字段的含义2.2 flags字段各标记含义 3. redis集群fail,noaddr问题解决4. cluster指令5. 相关文章(1) redis集群搭建(2) 华为云两台机器内网互联(3) /etc/rc.d/init.d 详解|程序开机自启(4) Redis5…

使用信号管理Nginx的父子进程

Nginx是一个多进程程序&#xff0c;进程之间进行通讯可以使用共享内存和信号等。做进程管理时&#xff0c;只能使用信号。 能够接受命令的有三者&#xff1a; Master进程 Work进程 nginx命令行 Master进程 可以监控Worker进程发来的CHLD信号。 管理worker进程可以接受的命令&a…

树——对称二叉树

leetcode题目地址 树为空树&#xff0c;亦为对称二叉树树非空时&#xff0c;仅需判断其左右子树是否对称判断左右子树对称 (1) 左右子树是否为空&#xff0c;有一个为空 便不对称&#xff0c; 都为空或都不为空 可能对称 (2) 左右子树根节点值是否相同 (3) 判断 左子树 的 左子…

【数据结构练习题】删除有序数组中的重复项

✨博客主页&#xff1a;小钱编程成长记 &#x1f388;博客专栏&#xff1a;数据结构练习题 &#x1f388;相关博文&#xff1a;消失的数字 — 三种解法超详解 删除有序数组中的重复项 1.&#x1f388;题目2. &#x1f388;解题思路3. &#x1f388;具体代码&#x1f387;总结 1…

【机器学习】决策树与分类案例分析

决策树与分类案例分析 文章目录 决策树与分类案例分析1. 认识决策树2. 分类3. 决策树的划分依据4. 决策树API5. 案例&#xff1a;鸢尾花分类6. 决策树可视化7. 总结 1. 认识决策树 决策树思想的来源非常朴素&#xff0c;程序设计中的条件分支结构就是if-else结构&#xff0c;最…

Python求n位的自幂数

一个n位自然数等于自身各个数位上数字的n次幂之和&#xff0c;则称此数为自幂数。 方法1 n int(input(请输入位数:)) for num in range(10**(n-1), 10**n):if sum(map(lambda i: int(i)**n, str(num))) num:print(num)方法2 n int(input(请输入位数:)) result filter(la…

手写IOC

本篇博客我们来手写一个IOC&#xff0c;就是模拟出IOC里边的实现过程。这过程怎么做呢&#xff1f; 咱们主要基于java中的反射&#xff0c;再加注解&#xff0c;来实现spring框架中IOC的这个效果。 下面我们来具体看看这个过程。首先因为这里边要用到反射&#xff0c;咱们把反…

实在没货,简历(软件测试)咋写?

简历咋写&#xff0c;这是很多没有【软件测试实际工作经验】的同学们非常头疼的事情。 简历咋写&#xff1f;首先你要知道简历的作用。 简历的作用是啥呢&#xff1f;一句话就是&#xff1a;让HR小姐姐约你。 如何让HR看你一眼&#xff0c;便相中你的简历&#xff0c;实现在众…

ubuntu扩大运行内存, 防止编译卡死

首先查看交换分区大小 grep SwapTotal /proc/meminfo 1、关闭交换空间 sudo swapoff -a 2、扩充交换空间大小&#xff0c;count64就是64G 1G x 64 sudo dd if/dev/zero of/swapfile bs1G count64 3、设置权限 sudo chmod 600 /swapfile 4、指定交换空间对应的设备文件 …

Golang WebSocket 创建单独会话

引言 在互联网应用程序中&#xff0c;实时通信是一种非常重要的功能。WebSocket 是一种基于 TCP 的协议&#xff0c;它允许客户端和服务器之间进行双向通信。Golang 是一种高性能的编程语言&#xff0c;它提供了对 WebSocket 的原生支持&#xff0c;使得在 Golang 中创建 WebS…

ROS自学笔记十九:URDF集成Gazebo

URDF (Unified Robot Description Format) 是一个用于描述机器人模型的 XML 文件格式&#xff0c;通常用于机器人仿真和控制应用中。Gazebo 是一个开源的机器人仿真工具&#xff0c;常用于测试和开发机器人控制算法。你可以将 URDF 模型集成到 Gazebo 中&#xff0c;以在仿真环…

【不用开发板学习STM32】可设置电子时钟

• 实验环境 工程文件下载链接&#xff01;https://mp.weixin.qq.com/s?__bizMzU2OTc4ODA4OA&mid2247551559&idx1&sn721b9238bc58936ac41e6ad1b9988554&chksmfcfb1990cb8c9086490b11c05bc76c08da15c71caa38715a047c49d36f25a149920aee482f3e&token204641…

C++配平化学方程式,附源码。配平化学方程式的C++代码实现

化学方程式是化学反应简明的表达形式&#xff0c;它从“质”和“量”两个方面表达了化学反应的意义。故化学方程式的书写是我们学习化学的过程中不可或缺的一个重要环节。当我们遇到简单的化学方程式例如&#xff1a;2H2 O2 2H2O 时&#xff0c;配平则是毫无压力&#xff0c;…

软件测试---等价类划分(功能测试)

能对穷举场景设计测试点-----等价类划分 等价类划分 说明&#xff1a;在所有测试数据中&#xff0c;具有某种共同特征的数据集合进行划分分类&#xff1a; 1&#xff09;有效等价类 2&#xff09;无效等价类步骤&#xff1a;1&#xff09;明确需求 2&#xff09;确定有效和无…

C语言实现输入一个字符串,递归将其逆序输出

完整代码&#xff1a; // 输入一个字符串&#xff0c;递归将其逆序输出。如输入 LIGHT&#xff0c;则输出 THGIL #include<stdio.h> #include<stdlib.h> //字符串的最大长度 #define N 20//逆序输出字符串 void func(char *str){if (*str\0){//结尾时直接退出递归…

基于MATLAB的电流、电压互感器特性的仿真分析

摘 要 电压互感器和电流互感器是电力系统中进行电能计量和继电保护的基本测量和继电保护等设备之一&#xff0c;其准确度及可靠性与电力系统的安全、可靠、经济运行密切相关。随着电力系统在监测、控制及保护等方面自动化和智能化要求的不断提高&#xff0c;传统的电磁式电压互…

[EFI]asus strix b760-i 13900F电脑 Hackintosh 黑苹果efi引导文件

硬件型号驱动情况主板 asus strix b760-i 处理器 I9 13900F 已驱动内存crucial ddr5-5200 64gb(32gb*2)(overclock 5600)已驱动硬盘 WD black sn850 500g*2 已驱动显卡rx570已驱动声卡Realtek ALCS1220A已驱动网卡Intel I225-V 2.5 Gigabit Ethernet已驱动无线网卡蓝牙Fevi T91…