就像UITableViewCells中的按钮一样

时间:2013-11-21 16:41:06

标签: objective-c tableview cell parse-platform

在我的UITableView中实现Like / Different函数时遇到问题。我正在使用Parse.com数据库,到目前为止,喜欢和不同的功能实际上工作,但如果我向下滚动一点,UITableView显示错误的信息。

使用NSLog获取我真正喜欢的正确行。我正在查询我在数据库中创建的类似于与indexPath上的对象进行比较,如果它们匹配,则不同的按钮应该是可见的。问题是,如果我喜欢第一行(索引0),不同的按钮也将显示在索引5,10,15等上。我从屏幕开始可以看到3,5个单元格。这是我在cellForRowAtIndexPath

中的代码
PFQuery *getLike = [PFQuery queryWithClassName:@"Likes"];
    [getLike whereKey:@"user" equalTo:[PFUser currentUser]];
    [getLike whereKey:@"post" equalTo:[mainFeed objectAtIndex:indexPath.row]];

    [getLike findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error){
        if(!error){
            PFUser* userIClickedOnInTheTableview = [PFUser currentUser];
            PFObject *checkObj = [mainFeed objectAtIndex:indexPath.row];

            for (PFObject *object in objects) {
                PFUser* checkUser = [object objectForKey:@"user"];
                PFObject *likeObj = [object objectForKey:@"post"];
                if([userIClickedOnInTheTableview.objectId isEqualToString:checkUser.objectId] && [checkObj.objectId isEqualToString:likeObj.objectId]){
                    NSLog(@"You like this row: %d", indexPath.row);

                    MIHFeedCell *thecell = (MIHFeedCell*)[tableView cellForRowAtIndexPath:indexPath];
                    thecell.likeBtn.hidden = YES;
                    thecell.unlikeBtn.hidden = NO;

                }else{
                    MIHFeedCell *thecell = (MIHFeedCell*)[tableView cellForRowAtIndexPath:indexPath];
                    thecell.likeBtn.hidden = NO;
                    thecell.unlikeBtn.hidden = YES
                    ;

                }
            }}
    }];

1 个答案:

答案 0 :(得分:0)

每次tableView的内容发生变化时(每次滚动时都会)运行的cellForRowAtIndexPath中不应出现该代码。

相反,在开始时运行该代码的次数较少,例如在视图出现时以及用户请求更新时。完成块应该将返回的对象放在NSArray属性中,并将reloadData放在表上。

表委托方法应该只引用这些对象的当前状态(不要试图改变它们的状态)。 cellForRowAtIndexPath应该小心设置“它喜欢”条件两边的单元格状态(我认为你的代码就是这样),所以重用的单元格在所有情况下都有正确的状态。