我正在为字母表中的所有字母创建可拖动的字母拼贴。如果一个单词需要多个相同的字母,我会在每个字母中创建5个字母。
我在我的MainViewControllers ViewDidLoad:方法中以编程方式创建每个UIImageView。
- (void)ViewDidLoad:
{
for (int i = 1; i <= 5; i++)
{
letterA = [[LetterTiles alloc] initWithFrame:CGRectMake(39, 104, 70, 70)];
[letterA setImage:[UIImage imageNamed:@"a.png"]];
letterA.tag = i;
[letterA setUserInteractionEnabled:YES];
[self.view addSubview:letterA];
[letterA release];
for (int i = 1; i <= 5; i++)
{
letterB = [[LetterTiles alloc] initWithFrame:CGRectMake(112, 104, 70, 70)];
[letterB setImage:[UIImage imageNamed:@"b.png"]];
letterB.tag = i;
[letterB setUserInteractionEnabled:YES];
[self.view addSubview:letterB];
[letterB release];
}
for (int i = 1; i <= 5; i++)
{
letterC = [[LetterTiles alloc] initWithFrame:CGRectMake(185, 104, 70, 70)];
[letterC setImage:[UIImage imageNamed:@"c.png"]];
letterC.tag = i;
[letterC setUserInteractionEnabled:YES];
[self.view addSubview:letterC];
[letterC release];
}
}
我有几个问题:
我应该为每个字母创建一个数组,还是为所有字母创建一个数组?
我应该使用什么样的阵列? NSMutableArray / NSArray或NSMutableDictionary / NSDictionary? - 我一直试图找出如何将所有这些字母添加到所有上述数组类型,然后根据他们的字母和标签检索它们,但不能为我的生活搞清楚。有人愿意用代码中的一个或两个字母向我展示一个例子吗?
有没有比我在这里展示和询问的更好的方法呢?
答案 0 :(得分:2)
对所有字母使用单个NSArray更好,它会减少您必须处理的变量数量。有这样的事情:
NSArray *arrayA;
NSArray *arrayB;
NSArray *arrayC;
...
NSArray *arrayZ;
只需要很多代码就可以在单个数据结构中轻松访问,更不用说,如果你计划添加数字,puncutation等,更容易更新。
Mutable意味着它可以更新,所以重要的问题,你的Array / Dictionary应该在运行时更新吗?如果答案是否定的,那么非可变数组可能会更好。另一方面,你必须自动用很多东西填充数组,所以拥有一个可变版本可能会让你拥有更清晰的代码(而不是[[NSArray alloc] initWithObjects:[UIImage imageNamed:@"A"], ...]
)。
所以我会选择可变版本,只是为了更清晰的代码。
这是个人选择,但我不喜欢在静态类型语言中嵌套数据结构(在python中这样做是一种幸福,例如myDictArray["key"][1]
)。我会使用组成键的Mutable Dictionary来存储相关数据:
NSString *key = [NSString stringWithFormat:"%c%d", letter, number]; // For example "J3" is the 3rd J letter.
另一方面,我不使用图像,而是使用大方形UILabel,以节省内存(和心理健全,处理那么多图像,呃),并选择iOS使用的许多字体之一( Here's a complete list)。
有了这个,生成一切,需要两个嵌套的fors,一个迭代每个字母,然后每5个重复一个,然后创建标签并将其扔到字典中(我会编写代码,但我'我不在Mac上。)