我对collectionView
有一个有趣的问题,特别是didSelectItemAtIndexPath
。
我的应用程序有一个带有背景图像的特定视图,可以通过SQL访问。在该视图中是一个带有collectionView的popover,用于更改父视图的背景,以及访问可供购买的其他“集合”。
我的问题是改变背景。所有项目在集合视图中正确显示,父项的背景将按预期更改。问题是所选项目不是显示的项目,即使通过NSLog
,我可以看到正在选择正确的图像并将其传递回父项。父级中有一个对应的NSLog
,它显示与弹出窗口NSLog
相同的图像ID。
点击时,collectionView
中的第一项会将父级的背景更改为白色,就好像没有可用的图像一样。点击第二个单元格将显示第一个单元格的图像。点击第三个单元格将显示第二个单元格的图像......依此类推。共有15幅图像可供选择。
这是didSelect
方法:
-(void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath
{
if ([_currentView isEqualToString:@"New_Journal"])
{
MyAppDelegate *appDelegate = (MyAppDelegate *)[UIApplication.sharedApplication delegate];
// to get the variable back to the parent
appDelegate.loadBackgroundID = indexPath.row;
// interact with the SQL via _settingsDao
[_settingsDao updateJournalBackgroundId:_journalId withBackgroundId:appDelegate.loadBackgroundID];
NSLog(@"Selected background: %d", indexPath.row);
// notification to let EntryView know the background has changed
[NSNotificationCenter.defaultCenter postNotificationName:@"aBackgroundChanged" object:self];
}
}
编辑以显示SQL交互方法:
-(void)updateJournalBackgroundId:(int)journalID withBackgroundId:(int)newBackgroundId
{
NSString *query = @"UPDATE BgIconBorderSettings SET background_id = ? WHERE journal_id = ?";
FMDatabase *db = [dbUtils sharedDB];
[db executeUpdate:query,[NSNumber numberWithInt:newBackgroundId],[NSNumber numberWithInt:journalID]];
if([db hadError])
{
NSLog(@"Error %d: %@",[db lastErrorCode],[db lastErrorMessage]);
}
}
任何人对如何获得要显示的抽头单元的正确图像有任何想法?感谢您解决此问题的任何帮助。
正如jhilgert指出的那样......它是SQL数据库。它从1开始而不是0.改变了ID并且它按预期工作。