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

news/2024/7/20 21:52:54 标签: ios, objective-c, 学习

文章目录

  • 一、框架和布局问题
  • 二、线程冲突问题
  • 三、下拉刷新问题
  • 四、添加网络请求的图片
  • 五、时间标题设置问题


一、框架和布局问题

仿写知乎日报用到的框架依旧是MVC框架,所以一开始要想好该怎么搭建大体框架,对于各个模块该怎么分配,需要用到哪些传值。对于布局,因为要用到导航栏的相关UI元素所以,我用的是将导航控制器作为根视图控制器再将导航控制器作为我自定义的视图控制器的根视图控制器。由于导航栏的UI元素不好布局所以我创建了一个导航视图并赋值给了导航栏的titleView属性。

UINavigationBarAppearance* appearance = [[UINavigationBarAppearance alloc] init];
        appearance.backgroundColor = [UIColor whiteColor];
    self.navigationController.navigationBar.standardAppearance = appearance;
    self.navigationController.navigationBar.scrollEdgeAppearance = appearance;
    self.navigationItem.titleView = self.zhihuView.titleView;

布局用到的有系统库中自带的方法和Masonry库的方法,两个搭配着使用效果要更好。

二、线程冲突问题

当我使用Block传值过来的网络请求的数据赋值给我布局的UI元素时,运行时总是会导致程序崩掉,查了下原因是进行完赋值后程序还没回到主线程进行UI布局,所以我加了下面这个方法让程序回到主线程进行布局。

 dispatch_async(dispatch_get_main_queue(), ^{
//
 });

三、下拉刷新问题

这里我使用了第三方库MJRefresh库进行下拉刷新,当我下拉刷新时,程序会调用这个库的库方法,接着我在库方法中给我创建的下拉数组添加新的元素,这里我设置的是组元素也就是每下拉刷新一次,添加一个元素,接着在tableView控件的返回组数的协议函数里返回我创建的下拉数组的元素个数。

self.zhihuView.tableView.mj_header = [MJRefreshNormalHeader headerWithRefreshingTarget:self refreshingAction:@selector(loadNewData)];
self.currentPage = 1;
    [self loadMoreData];
    self.data = [NSMutableArray arrayWithObjects:@"Section 0", @"Section 1", nil];


- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
    return self.data.count;
}

- (void)loadMoreData {
    // 模拟网络请求加载更多数据
    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
        // 模拟生成新的表格数据
        NSArray *newData = [self generateNewData];
        
        // 将新的数据添加到原有的数据源中
        [self.data addObjectsFromArray:newData];
        
       
        }

- (NSArray *)generateNewData {
    NSMutableArray *newData = [NSMutableArray array];
    NSInteger count = 1;
//    for (NSInteger i = 0; i < count; i++) {
        NSInteger section = self.currentPage * count + 1;
        NSString *data = [NSString stringWithFormat:@"Section %ld", (long)section];
        [newData addObject:data];
//    }
    self.currentPage++;
    return newData;
}

四、添加网络请求的图片

我通过网络请求的图片只是这个图片的字符串形式的URL地址,还需要将这个图片的URL地址转换成URL,接着通过URL才能加载图片到指定的UI控件上。这里我用到的是SDWebImage库来进行,这个库可以通过图片URL将图片加载到指定的UI控件上。

NSArray* contentIamgeArray = [self.contentPreDataArray[indexPath.row] images];
        NSString* contentImageStr = contentIamgeArray[0];
        NSURL* contentImageUrl = [NSURL URLWithString:contentImageStr];
        [cell02.contentImageView sd_setImageWithURL:contentImageUrl];

五、时间标题设置问题

对于知乎日报上每天的时间标题,我使用的是日期组件,时间和tableview的组数建立数学关系,这样就能实现时间标题

- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section {
    if (section >= 2) {
        NSDate* titleDate = [[NSDate alloc] initWithTimeIntervalSinceNow:-(section - 1) * 3600 * 24];
        NSCalendar* gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian];
        unsigned unitFlags = NSCalendarUnitMonth | NSCalendarUnitDay;
        NSDateComponents* comp = [gregorian components:unitFlags fromDate:titleDate];
        NSString* dateStr = [NSString stringWithFormat:@"%ld月%ld日", comp.month, comp.day];
        return dateStr;
    }
    return @"";
}

请添加图片描述
请添加图片描述


http://www.niftyadmin.cn/n/5114730.html

相关文章

多态2........

虚函数的virtual和虚继承腰部的virtual没有一点关系! 多态和虚继承都在内存中产生了额外的东西&#xff0c;但是他们两个没有一点关系&#xff01; 那要是两个套在一起呢&#xff1f;那也是各是各的&#xff0c;你解决你的数据冗余二义性&#xff0c;我解决我的多态问题。

找不到mfc140u.dll无法继续执行此代码的5个修复方法分享

是使用计算机的过程中&#xff0c;我们经常会遇到各种各样问题&#xff0c;其中丢失“mfc140u dll”&#xff08;动态链接库&#xff09;是最常见的一种。DLL文件是一种可在多个程序之间共享的代码库&#xff0c;它可以被应用程序在运行时动态加载和卸载。而“mfc140u dll”则是…

软件设计原则-里氏替换原则讲解以及代码示例

里氏替换原则 一&#xff0c;介绍 1.前言 里氏替换原则&#xff08;Liskov Substitution Principle&#xff0c;LSP&#xff09;是面向对象设计中的一条重要原则&#xff0c;它由Barbara Liskov在1987年提出。 里氏替换原则的核心思想是&#xff1a;父类的对象可以被子类的…

React-Redux总结含购物车案例

React-Redux总结含购物车案例 reduc简介 redux是react全家桶的一员&#xff0c;它为react给i共可预测化的状态管理机制。redux是将整个应用状态存储到一个地方&#xff0c;成为store,里面存放着一颗树状态(state,tree),组件可以派发dispatch行为action给store,而不是直接通知其…

数码配件小程序商城的作用是什么

如今各行业各商家都在积极组建自有私域流量运营体系&#xff0c;简单来说就是数码配件商家拥有自己的线上卖货商城&#xff0c;多渠道无范围经营&#xff0c;同时赋能线下店铺&#xff0c;连接线上线下闭环&#xff0c;尤其对数码配件经营商家而言&#xff0c;产品多且需要客流…

从 C 到 C++ 编程 — 基于 template 的泛型编程

目录 文章目录 目录C++ 模版和泛型编程函数模版类模版C++ 标准模板库(STL)C++ 模版和泛型编程 C++ 提供了多种代码重用机制,例如:继承、派生、多态等都属其中,而 C++ 模板也是其中的一种。 C++ 模板用于满足泛型编程场景。所谓泛型编程,即:以一种独立于任何特定类型的…

接口自动化测试小结

一、接口测试的概念 1、接口&#xff1a;指系统或组件之间的交互点&#xff0c;通过这些交互点可以实现数据之间的交互。(数据交互的通道) 2、接口测试&#xff1a;对系统或组件之间的接口进行测试&#xff0c;主要用于检测外部系统与系统之间以及系统内部之间的数据交换、传…

解决ubuntu22.04解压.zip文件后中文文件名乱码

下载或者复制过来的.zip压缩包在ubuntu中右键提取或者unzip解压之后会出现中文文件名乱码的问题&#xff0c;解决办法是安装unar&#xff0c;使用unar命令来解压文件&#xff1b; sudo apt-get install unar unar xxx.zip 问题解决&#xff01;