首页 > 学院 > 开发设计 > 正文

IOS开发-项目实战-点赞功能的实现

2019-11-14 18:18:37
字体:
来源:转载
供稿:网友

实现思路:

1.每一条新闻就是一个cell,在cell上添加点赞按钮。

2.让cell的控制器成为自定义cell的代理,将点击了哪一个cell放在代理方法中传出去。

3.并将这条新闻的ID当前用户的ID上传服务器。

4.此时要考虑每个用户只能点击一次且当用户再次点击的时候,取消点赞(定义一个BOOL变量存储用户的点击次数)。则将上传的数据取出来,做判断,如果取出来有数据,说明用户点击过,没有数据那就存储到网络。再次点击,将请求下来的数据,即BOOL变量存储为NO,即取消点赞。

5.到这里就要考虑取出所有用户点击此条新闻的数据怎样赋值给cell?也就是和取其他数据一起取出,这样保证每条新闻对应数据量一直,然后一起赋值给cell,这样就完成了这项功能。

部分重点代码实现:(bmob)

在cell的代理方法中:

-(void)TableViewForCell:(News_TableViewCell *)cell andbutton:(UIButton *)button{     //    获得点击了那一行    NSIndexPath *indexPath = [Mytabview indexPathForCell:cell];    NSString *className = @"dian_zan";        Newmodel *news = _allmodelNews[indexPath.row];    BmobObject *data = [[BmobObject alloc] initWithClassName:className];//    获得当前用户    BmobUser *user = [BmobUser getCurrentUser];        BmobQuery *query = [BmobQuery queryWithClassName:className];//    两个判断条件,用户的ID和此条新闻的ID作判断    [query whereKey:@"newsID" equalTo:news.ID];    [query whereKey:@"userID" equalTo:user.objectId];    [query findObjectsInBackgroundWithBlock:^(NSArray *array, NSError *error)  {        NSLog(@"error == %@",error);//        用户点击过        if (array.count!=0) {//            取到已经点赞的那一行            BmobObject *zanObj = array[0];//            用户取消点赞或者点赞            BOOL zann = [[zanObj objectForKey:@"dianzan"] boolValue]==NO?YES:NO;                        BmobObject *data = [BmobObject objectWithoutDatatWithClassName:className objectId:zanObj.objectId];//            最终结果上传云端            [data setObject:@(zann) forKey:@"dianzan"];            [data updateInBackgroundWithResultBlock:^(BOOL isSuccessful, NSError *error) {                if (!error) {                           }            }];                    }else{//        用户没有点击过的话,就保存用户点赞            [data setObject:user.objectId forKey:@"userID"];            [data setObject:news.ID forKey:@"newsID"];            [data setObject:@(YES) forKey:@"dianzan"];//            [data setObject:@(indexPath.row) forKey:@"row"];            [data saveInBackgroundWithResultBlock:^(BOOL isSuccessful, NSError *error) {                NSLog(@"tijiao == %@",error);                if (!error) {                         }            }];        }              }];    }

处理网络数据,将网络数据赋值给对应的cell.

 1 #PRagma mark----------------网络数据下载----------------------- 2 -(NSArray *)allmodelNew{ 3 //    每次调用该方法初始化点赞数组,保证每条新闻的数据互不影响。 4     zan = [NSMutableArray array];//由于数据下载是异步下载,所以点赞和其他数据各用一个可变数据存放数据 5     NSString *className = @"CampusNews"; 6     NSMutableArray *all = [NSMutableArray array]; 7     BmobQuery *quer = [BmobQuery queryWithClassName:className]; 8     [quer orderByDescending:@"updatedAt"]; 9     quer.limit = 3;10     [quer findObjectsInBackgroundWithBlock:^(NSArray *array, NSError *error) {11         12         for (BmobObject *data in array) {13 //            用一个Newmodel模型来装载数据14             Newmodel *info    = [[Newmodel alloc] init];15             if ([data objectForKey:@"name"]) {16                 info.name    = [data objectForKey:@"name"];17             }18             if ([data objectForKey:@"text"]) {19                 info.text  = [data objectForKey:@"text"];20             }21             info.time   = [dateformatter stringFromDate:data.updatedAt];22             info.ID = data.objectId;23  #pragma mark---------------点赞计算--------------------------24 //            查找点赞个数25             BmobQuery *query = [BmobQuery queryWithClassName:@"dian_zan"];26 //            查找该账号的所有点赞数据(并且全部是YES的数据)27             [query whereKey:@"newsID" equalTo:data.objectId];28             [query whereKey:@"dianzan" equalTo:@(YES)];29             [query findObjectsInBackgroundWithBlock:^(NSArray *array, NSError *error) {30 //                可变数组zan31                 [zan addObject:@(array.count)];32         33             }];34             35             [all addObject:info];36         }37         _allmodelNews = all;38         if (_allmodelNews.count == _allmodelNews.count) {39             [Mytabview.footer endRefreshing];40         }41 42         [self performSelectorOnMainThread:@selector(upDateUI) withObject:nil waitUntilDone:YES];43            }];44        return _allmodelNews;45 }

 


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表