繁体   English   中英

iOS-刷新UICollectionView自定义单元中的内容

[英]iOS - Refreshing content in UICollectionView custom cell

我对iOS开发人员和Objective-C相当陌生,我正在制作一个核仁巧克力点应用程序。 我使用的是一个sqlite数据库,该数据库存储员工姓名以及他们拥有多少点,我还具有一个自定义单元格,该单元格显示姓名和他们在标签上拥有多少点。

为了增加它们的分数,我在单元格上有一个按钮,该按钮指向更新其分数所需的SQL Update语句。

我的问题是,当我单击该按钮时,所有内容都可以使用,但是直到我离开视图然后返回到视图为止,它都不会显示更新的点。 我努力了 :

[self.collectionview reloadData];

我已经在按钮操作中进行了尝试,甚至尝试添加点击手势识别器,以便每当用户点击时,它都会重新加载数据。 一切都没有成功,我没有收到错误或崩溃,只是没有刷新标签。

任何帮助将不胜感激<3

编辑:如果有帮助,我有一类名为DatabaseHelper的类,其中包含与SQL有关的所有方法。

这是我的更新方法:

+(void)minusPoints:(NSString *)cell {
[self databaseInit];


if (sqlite3_open(dbpath, &peopleDB)== SQLITE_OK) {

    NSString *updateSQL = [NSString stringWithFormat:@"UPDATE PEOPLE SET POINTS = (POINTS - 1) WHERE ID =%@", cell];
    sqlite3_prepare_v2(peopleDB,[updateSQL UTF8String],-1,&statement,NULL);

    if (sqlite3_step(statement)== SQLITE_DONE) {
        NSLog(@"Updated Successfully");
    }
    else {
        NSLog(@"%s SQLITE_ERROR '%s' (%1d)", __FUNCTION__, sqlite3_errmsg(peopleDB), sqlite3_errcode(peopleDB));
    }
    sqlite3_finalize(statement);
    sqlite3_close(peopleDB);
}

}

从数据库获取数据:

+(NSMutableArray*)getData {
[self databaseInit];

peopleArray = [[NSMutableArray alloc] init];

if (sqlite3_open(dbpath, &peopleDB)== SQLITE_OK)
{

    NSString *selectSQL = @"SELECT ID, NAME, POINTS FROM PEOPLE ORDER BY POINTS DESC";
    sqlite3_prepare_v2(peopleDB,[selectSQL UTF8String],-1,&statement,NULL);

        while (sqlite3_step(statement)== SQLITE_ROW)
        {
            PersonObject *newPerson = [[PersonObject alloc]init];
            newPerson.ID = [[NSString stringWithUTF8String:(char *)sqlite3_column_text(statement, 0)]integerValue];
            newPerson.name = [NSString stringWithUTF8String:(char *)sqlite3_column_text(statement, 1)];
            newPerson.points = [[NSString stringWithUTF8String:(char *)sqlite3_column_text(statement, 2)] integerValue];
            [peopleArray addObject:newPerson];

        }
    NSLog(@"%s SQLITE_ERROR '%s' (%1d)", __FUNCTION__, sqlite3_errmsg(peopleDB), sqlite3_errcode(peopleDB));
    }

    sqlite3_finalize(statement);
    sqlite3_close(peopleDB);

return peopleArray;

}

编辑2:我已经回答了第一个答案,但还是没有运气。 (在ViewController.m中)

//refresh cells
    -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
    UITouch *touch = [[event allTouches]anyObject];
    if ([touch view]) {
    dispatch_async(dispatch_get_main_queue(), ^{
        [self.collectionView reloadData];
    });
}
   [super touchesBegan:touches withEvent:event];
}

尝试使用GCD:

dispatch_async(dispatch_get_main_queue(), ^{
    [self.collectionView reloadData]; 
}); 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM