知乎日报总结

知乎日报总结

关于主页面的网络请求

首先我是用MVC设计模式去进行架构页面,首先我们在Model里让它去继承第三方库JSONModel,JSONModel是快速方便的把JSON数据转化为ObjectiveC的数据类型,是json转model的第三方开源库。当我们向服务器发送一个请求之后,通过JSONModel把数据转成model中的属性就可以很方便的供给我们使用了。

@interface StoriesModel : JSONModel
@property (nonatomic, copy) NSString *image_hue;
@property (nonatomic, copy) NSString *title;
@property (nonatomic, copy) NSString *hint;
@property (nonatomic, copy) NSArray *images;
@property (nonatomic, copy) NSString *ga_prefix;
@property (nonatomic, copy) NSString *type;
@property (nonatomic, copy) NSString *id;
@end

我们在View里将所有需要的数据定义,并在运用的时候进行初始化
特别要注意的是如何使滚动视图变得更加顺滑点,按理说我们的滚动试图只有五张图片,但是为了使滚动视图更加顺滑,我们设置七张图的大小但是只有五张页数,然后我们通过将第六张放第一张图,然后我们需要设置两个函数,一个左划函数,一个右划函数,每一次划动将它的画面大小改变,并且改变它的页码数。这样就能做到滑动滚动视图更加顺滑。
然后我们在ViewController里进行网络请求,并且将请求到的数据,通过属性HomeView传值到对应的数组里,然后在对应的cell中将数据利用提前在数据中储存好的数据进行赋值。我们还需要注意的一点是,数组需要提前初始化然后再进行赋值,同时我们在进行下划刷新的时候,调用了另外一个网络请求:

-(void)NetWorkBeforeWithData:(NSString *)a and:(SucceedBlock)succeedBlock error:(ErrorBlock)errorBlock{
    NSString *json = [NSString stringWithFormat:@"http://news.at.zhihu.com/api/4/news/before/%@",a];
    json = [json stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
    NSURL *testUrl = [NSURL URLWithString:json];
    NSURLRequest *testRequest = [NSURLRequest requestWithURL:testUrl];
    NSURLSession *testSession=[NSURLSession sessionWithConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration] delegate:self delegateQueue:[[NSOperationQueue alloc] init]];
    NSURLSessionDataTask *testDataTask = [testSession dataTaskWithRequest:testRequest completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
        if (error == nil) {
            HomeModel *country = [[HomeModel alloc] initWithData:data error:nil];
            succeedBlock(country);
        } else {
            errorBlock(error);
        }

    //任务启动
        [testDataTask resume];
}

新闻页面的展开

在点击单元格后,需要使用WKWebView创建网页,因为是获取URL访问主乎日报上的文章,因此需要在点击进文章后将该单元格的URL或者id的值传进下一个页面,在我感觉而来通知传值是比较好用的。
首先先添加一个通知传值的方法:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(press:) name:@"press" object:nil];

如何实现下拉刷新的功能?

首先我们在前边进行网络请求的时候,将每一个对象的id传入到了一个数组里边,假如我们的主页面只刷新了六条数据,所以就说明此时我们的数组里边只含有五个对象,所以我们下拉刷新只能刷新到此时数组中含有的数据,然后我们通过循环:

 for (int i = 0; i < _idArray.count; i++) {
        WKWebView *webView = [[WKWebView alloc] initWithFrame:CGRectMake(0, (self.view.frame.size.height - 100) * i, self.view.frame.size.width, self.view.frame.size.height - 200)];
        [_scrollerView addSubview:webView];
        NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:@"https://daily.zhihu.com/story/%@",_idArray[i]]];
        NSURLRequest *request = [NSURLRequest requestWithURL:url];
        [webView loadRequest:request];
        }

FMDB实现收藏功能

FMDB的使用
上周写的这个关于FMDB实现收藏功能的博客在这里,可以看一看。

评论功能的实现

首先我们在完成评论功能时,也是使用的MVC设计模式,所以关于MVC的知识点和前边大同小异,那么就再记一些需要注意的点:

  1. 传值问题 ,首先第一个需要传值的地方就是在新闻页面跳转评论页面的时候,我们需要将页面的id值传到评论页面:
for (int i = 0; i < _idArray.count; i++) {
        if ([_idArray[i] isEqual:_testID]) {
            [_scrollerView setContentOffset:CGPointMake(self.scrollerView.frame.size.width, (self.scrollerView.frame.size.height) * i)];
            _flag = i;
        }
    }

- (void)comment {
    CommentViewController *comment = [[CommentViewController alloc] init];
    comment.testIDNumber = _idArray[_flag];
    [self.navigationController pushViewController:comment animated:YES];
}

将id值传过来以后,就可以进行网络请求了。

  1. UILabel自动计算行高 并且 最多显示n行
-(CGSize)ZFYtextHeightFromTextString:(NSString *)text width:(CGFloat)textWidth fontSize:(CGFloat)size{
    //计算 label需要的宽度和高度
    NSDictionary *dict = @{NSFontAttributeName:[UIFont systemFontOfSize:size]};
    CGRect rect = [text boundingRectWithSize:CGSizeMake(textWidth, MAXFLOAT) options:NSStringDrawingTruncatesLastVisibleLine|NSStringDrawingUsesFontLeading|NSStringDrawingUsesLineFragmentOrigin attributes:dict context:nil];
    
     CGSize size1 = [text sizeWithAttributes:@{NSFontAttributeName: [UIFont systemFontOfSize:size]}];
    
    return CGSizeMake(size1.width, rect.size.height);
}

通过计算后我们将不需要展开的评论,也就是短评论,将短评论的numberOfLines设置为0,将需要展开的评论的numberOfLines设置为2就行了。

最近还在看写过的项目,希望还可以学到新的知识点,如果有新的知识点再来进行补充。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值