我正在尝试编写我的第一个 iPhone 应用程序,但我遇到了一种设计难题。我想要做的是有一个图标网格,当你触摸一个时,上面和左边的所有图标都会“激活”,而下面和右边的所有图标都会“停用”。如果一个图标被激活,它会显示一张图片,如果它没有被激活,它会显示另一张。
我遇到的问题是我想为这些单独的图标中的每一个分配一个手势识别器,当点击该图标时,它需要调用一个函数来更新我的图标网格。但是为了正确更新,该函数需要将图像在网格中的位置作为参数传递,并且无法调用带有参数的函数作为手势识别器的一部分。
所以我真正需要做的就是扩展 UIImageView 以保存两个额外的整数和它包含的网格,然后我可以有以下代码:
imageView.userInteractionEnabled = YES;
UITapGestureRecognizer *tapgr = [[UITapGestureRecognizer alloc] initWithTarget:
self action:@selector(handleTap)];
[imageView addGestureRecognizer:tapgr];
:
:
- (void)handleTap
{
[self.grid updateTableFromRow:self.row andCol:self.col
}
所以我想这是一种方法,但有人告诉我,我不应该在 Objective-C 中扩展类,我应该从头开始构建它们。在这种情况下,我只需使用我需要的所有属性和/或实例变量创建一个自定义视图,然后我将使用 UIImageView 填充此自定义视图。
这大部分都很好,除了构建我的故事板时。我将管理和创建此图标表(以编程方式)的所有代码放在另一个自定义视图 GridOfIconsView 中。因此,在 Storyboard 上,我拖出一个自定义视图并设置为 GridOfIconsView,但随后我只看到一个大的白色矩形,我真的希望能够在 Storyboard 中可视化我的应用程序。我知道我可以将用于图标的实际图像文件拖到 Storyboard 上并将它们设置为自定义视图,但那是如何工作的呢?该图像只是自定义视图的背景吗?我可以以编程方式更改它吗?因此,如果激活的图像是绿色方块,而停用的图像是红色的,并且我最初将红色方块拖到情节提要中,我可以访问那个红色方块图像吗?
一个更令人担忧的问题是,我想在一个数据结构中管理所有这些图标,或者作为二维数组(id icons[][])或 NS(Mutable?)Array 的 NS(Mutable?)Arrays。无论哪种方式,我如何初始化数据结构以包含所有这些的链接?网格可能是 8x8 或 10x10,我不可能有 64-100 个@propertys 连接这些图标。我在想明智地组织这个的唯一方法是以编程方式,但是,我怎样才能在 Storyboard 中可视化它?