2013-04-30 47 views
2

我正在处理我的第一个更复杂的应用程序,并找不到解决方案。我已将约64个图标加载到我的应用程序中。对于表格视图,用户可以为每个单元分配这些图标中的一个。基本上,当他编辑单元格时,他会获得带有全部64个图标的新UIView。当前选择的图标应该有边框,如果他点击不同的边框,边框应该移动并且图标将分配给tableview中的所选项目。iOS:如何处理用户可选择的图标? (保存/加载等)

我现在的问题是: a)如何将这64个图标加载到我的视图中?我用所有的UIImageView创建了视图,但是如何将它们加载到这些图像视图中?如果我将它们复制到我的目录并且如何访问它们,它们将保存在哪里? b)是否有比将64个不同的UIViews手动放入此视图并将其与IBOutles连接起来更简单的方法?

回答

0

这是一个很大的问题,在各种主题。

如何加载图标/图像?

UIImage *image = [UIImage imageNamed:@"fubar.png"]; 
UIImageView *imageView = [[UIImageView alloc] initWithImage:image]; 

如果你只是在你的项目中的图像复制他们的主束的一部分,并且在大多数情况下,你和几乎忽略在那里它们被保存。访问它们非常简单。 (见上)

有没有一种“更简单的方法”...好吧,如果你想知道是否有更简单的方法,你必须给我们一个方法。不过,我认为一个简单的命名约定和循环是可行的。

NSMutableArray *icons = [NSMutableArray array]; 
NSString *iconName; 
UIImage *image; 
UIImageView *imageView; = [[UIImageView alloc] initWithImage:image]; 
for (int count=0 ; count < 65 ; count++) { 
    iconName = [NSString stringWithFormat:@"icon%d.png", count]; 
    image = [UIImage imageNamed:iconName]; 
    [icons addObject:image];   
} 

那么你可以使用你的icons阵列作为UITableView的基础。尽管如此。您可能需要考虑使用UICollectionView代替。它就像一张桌子,但它是一排物品而不是只有一排。它可以更好地处理大量图像。

至于如何将图像复制到视图中,您的UITableViewUICollectionView都有他们“询问”数据并提供给您的位置的方法。根据你刚才设定的位置信息,它会处理剩下的部分。它可能看起来像

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath 
    // ... 
    // remembering 'icons' is our array of image data 
    cell.imageView.image = icons[indexPath.row]; 
    // ... 
} 

从评论编辑:How to tell if a file exists in the app bundle?(我的回答仅仅是一个剪切/粘贴)

[[NSFileManager defaultManager] fileExistsAtPath:pathAndFileName]; 
+0

虽然有一个跟进问题:如何检查某个图像是否存储在应用程序包中? – MichiZH 2013-05-01 08:27:32

0

你将不得不在代码中这样做。我建议你把所有的文件名都放入NSArray,然后遍历它,每一步都会以编程方式在你的ViewController上创建一个UIImageView。我建议,虽然你的子类UIButton,所以它是“选择”,当你点击它,然后你可以把任何图像进去。

2

使用UICollectionView可以轻松解决您的问题。一个UICollectionView就像一个UITableView。

经过联系,以便找到更多关于UICollection

http://skeuo.com/uicollectionview-custom-layout-tutorial

使用UICollection查看您只需要通过保存在数组中的图像对象

+0

但这种方法的一个严重缺点是事实上,你的应用程序只能在iOS 6以上运行,并且不会支持早期的iOS版本。 – 2013-04-30 14:27:08

0

可以使用的GridView这里的开源组件是链接

GridView

此外,要检测您可以为每个imageView分配标签,如从0到63然后,当用户选择第0个图像时,您可以将该标签分配给局部变量,以便下次用户查看网格时,您可以确定该用户以前选择了第0个索引图像。我希望它能帮助你。