iOS:如何处理用户可选择的图标? (保存/加载等)

Posted

技术标签:

【中文标题】iOS:如何处理用户可选择的图标? (保存/加载等)【英文标题】:iOS: How to handle icons selectable by user? (saving/loading etc.) 【发布时间】:2013-04-30 13:05:06 【问题描述】:

我正在开发我的第一个更复杂的应用程序,但找不到解决方案。我已经在我的应用程序中加载了大约 64 个图标。对于表格视图,用户可以为每个单元格分配这些图标之一。基本上,当他编辑单元格时,他会进入一个包含所有 64 个图标的新 UIView。当前选择的图标应该有一个边框,如果他点击不同的边框,边框应该会移动,并且图标会分配给 tableview 中的所选项目。

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

【问题讨论】:

【参考方案1】:

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

通过链接了解更多关于 UICollection 的信息

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

使用 UICollection 视图,您只需要传递保存在数组中的图像对象

【讨论】:

但是这种方法的一个严重缺点是您的应用只能在 ios 6 及更高版本上运行,并且不支持早期的 iO​​S 版本。【参考方案2】:

这是关于各种主题的很多问题。

如何加载图标/图像?

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];

【讨论】:

一个后续问题:如何检查某个图像是否存储在应用程序包中?【参考方案3】:

您必须在代码中执行此操作。我建议您将所有文件名放在NSArray 中,然后遍历它,并在每一步以编程方式在您的ViewController 上创建一个UIImageView。我建议您将UIButton 子类化,以便在您点击它时“选中”它,然后您可以将任何图像放入其中。

【讨论】:

【参考方案4】:

你可以使用gridView一个开源组件这里是链接

GridView

还可以检测到您可以为每个 imageView 分配标签,例如从 0 到 63,然后当用户选择第 0 个图像时,您可以将该标签分配给本地变量,以便下次用户查看网格时,您可以识别该用户之前选择了第 0 个索引图像。希望对你有帮助。

【讨论】:

以上是关于iOS:如何处理用户可选择的图标? (保存/加载等)的主要内容,如果未能解决你的问题,请参考以下文章

H.265视频EasyPlayer播放器点播FLV不断加载,如何处理?

Android、IOS、网站图片如何处理?

socket.io:如何处理 4000 个用户?

Cordova:如何处理图标?

用户选择允许后如何处理启用位置服务?

如何处理主队列上的多个 moc