首页 / IOS / IOS开发-项目实战-点赞功能的实现
IOS开发-项目实战-点赞功能的实现
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了IOS开发-项目实战-点赞功能的实现,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3387字,纯文字阅读大概需要5分钟。
内容图文
实现思路:
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) {
1112for (BmobObject *data in array) {
13// 用一个Newmodel模型来装载数据14 Newmodel *info = [[Newmodel alloc] init];
15if ([data objectForKey:@"name"]) {
16 info.name = [data objectForKey:@"name"];
17 }
18if ([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)];
3233 }];
3435 [all addObject:info];
36 }
37 _allmodelNews = all;
38if (_allmodelNews.count == _allmodelNews.count) {
39 [Mytabview.footer endRefreshing];
40 }
4142 [self performSelectorOnMainThread:@selector(upDateUI) withObject:nil waitUntilDone:YES];
43 }];
44return _allmodelNews;
45 }
原文:http://www.cnblogs.com/chenhongios/p/4817908.html
内容总结
以上是互联网集市为您收集整理的IOS开发-项目实战-点赞功能的实现全部内容,希望文章能够帮你解决IOS开发-项目实战-点赞功能的实现所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。