仿写知乎日报第三周

新学到的

本周新学习了FMDB数据库,并对Masonry的使用有了更近一步的了解,还了解了cell的自适应高度

  • FMDB数据库的介绍和使用:iOS——FMDB的介绍与使用

cell自适应高度和Mansonry自动布局

本周写了评论区,在写评论区的时候,学到了cell的自适应高度。首先是要将tableView的rowHeight属性设置为UITableViewAutomaticDimension,这样就可以使cell自动适应cell内容的高度。如下:

        self.pingLunView.tableView.rowHeight = UITableViewAutomaticDimension;

然后要对cell中的控件位置使用Masonry自动布局。因为这个cell自适应高度是要依靠cell中的内容的布局的,相当于靠cell中内容的大小将cell撑大。因此在cell中的Masonry布局中,我们只要设置控件的left、right、top、bottom即可,要注意这块一定要把布局设置合理了,我在写布局的时候两个控件的布局发生冲突,程序虽然没崩但是一直报警告。代码实现如下:

    [self.nameLabel mas_makeConstraints:^(MASConstraintMaker *make) {
        make.left.equalTo(self.contentView).offset(70);
        make.top.equalTo(self.contentView).offset(10);
        make.width.equalTo(@(self.contentView.bounds.size.width - 90));
        make.height.equalTo(@30);
    }];
    
    [self.pingLunLabel mas_makeConstraints:^(MASConstraintMaker *make) {
        make.left.equalTo(self.nameLabel.mas_left);
        make.top.equalTo(self.nameLabel.mas_bottom).offset(10);
        make.right.equalTo(self.contentView.mas_right).offset(-20);
        make.bottom.equalTo(self.replylabel.mas_top).offset(-10);
    }];
    
    [self.dianZanButton mas_makeConstraints:^(MASConstraintMaker *make) {
        make.left.equalTo(self.contentView.mas_right).offset(-60);
        make.top.equalTo(self.contentView.mas_bottom).offset(-30);
        make.right.equalTo(self.contentView.mas_right).offset(-30);
        make.bottom.equalTo(self.contentView.mas_bottom).offset(-30);
    }];
    
    [self.replylabel mas_makeConstraints:^(MASConstraintMaker *make) {
        make.left.equalTo(self.pingLunLabel.mas_left);
        make.top.equalTo(self.pingLunLabel.mas_bottom).offset(10);
        make.right.equalTo(self.pingLunLabel.mas_right);
        make.bottom.equalTo(self.contentView.mas_bottom).offset(-50);
    }];

使用FMDB本地存储数据

在实现本地持久化时,我用到了FMDB。首先我在收藏的功能中使用了FMDB,具体用法是在收藏的Model层中写了FMDB的相关方法,在显示具体页面的部分有收藏按钮,如果点击了收藏按钮,就将当前页面的id、url、title、hint、image属性以及收藏和点赞的BOOL值使用FMDB的增加方法加入数据库,反之如果取消收藏按钮,就将该数据删除。然后在收藏的tableView中将FMDB中的数据放入cell中,就可以完成收藏的本地持久化。
在从数据库中查找数据的方法,我返回的是一个数组,这个数组中存放着字典。

- (NSArray*)findDataWithChoice: (BOOL) isurl{
    if ([self.collectionDatabase open]) {
        NSMutableArray *array = [[NSMutableArray alloc] init];
        if (isurl == YES) {
            FMResultSet *resultSet = [self.collectionDatabase executeQuery:@"SELECT * FROM collectionData"];
            while ([resultSet next]) {
                NSString *url = [resultSet stringForColumn:@"url"];
                NSString *idstr = [resultSet stringForColumn:@"id"];
                NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys: idstr, @"ID", url, @"url", nil];
                [array addObject:dict];
            }
            [self.collectionDatabase close];
            return array;
        } else {
            FMResultSet *resultSet = [self.collectionDatabase executeQuery:@"SELECT * FROM collectionData"];
            while ([resultSet next]) {
                NSString *titleStr = [resultSet stringForColumn:@"title"];
                NSString *hintStr = [resultSet stringForColumn:@"hint"];
                NSString *imageStr = [resultSet stringForColumn:@"image"];
                NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:titleStr, @"title", hintStr, @"hint", imageStr, @"image", nil];
                [array addObject:dict];
            }
            [self.collectionDatabase close];
            return array;
        }
    }
    return nil;
}

对之前写的内容的优化修改

在一开始写评论区的时候,头像的获取的图片的请求我是放在cell中的,导致每当出现cell出现和消失的时候都会再次请求一遍头像,因此我修改为将请求的头像放在一个数组中再赋值,就可以让cell只请求一遍,不会反复请求。

效果图

评论区:
仿写知乎日报第三周_第1张图片
仿写知乎日报第三周_第2张图片
收藏:
仿写知乎日报第三周_第3张图片

还有问题的地方

评论区的折叠展开评论功能,因为获取label的高度还有问题,因此还没有完成
收藏功能因为收藏顺序和加入数据库的顺序相反,因此在左右滑动收藏的页面时有bug
点赞和收藏的状态还没有写完

你可能感兴趣的:(objective-c,ios,xcode)