0

我正在 Xcode 中构建一个应用程序,其中 NIB 中有 81 个文本视图,每个都有一个顺序名称,所以 box1、box2、box3、box4 等。

例如,在进行数据操作时,我希望能够使用每个框中的数据添加到数组中。我想做的就是把它放在一个循环中,例如:

NSMutableArray *array = [[NSMutableArray alloc] init];
for (int i=1; i<82; i++) {
    [array addObject: [Indirect("box" & i).text];
}

同样,当输出回文本视图时,我希望能够从数组中循环,而不是独立地引用每个文本视图。所以像:

for (int i=1; i<82; i++) {
    indirect("box" & i).text = [array objectAtIndex:i];
}

有任何想法吗?对不起,如果这很明显 - 对游戏来说相当新。

4

3 回答 3

1

在 Cocoa 中,有两种方法可以做到这一点:

  1. 将所有字段添加到awakeFromNib. 享受写 82addObject:条消息。
  2. 从 nib 中删除字段并在代码循环中创建它们,将每个字段添加到数组中。(这就是我要做的。)

一旦它们在一个数组中,你可以通过索引来引用它们,就像你处理字符串一样。

但是您提到您正在访问字段的text属性。这仅存在于 Cocoa Touch 中,不存在于 Cocoa 中。如果您使用的是 Cocoa Touch,那么您还有第三种选择:

  • 用奥特莱斯系列替换您的 82 个奥特莱斯。

出口集合属性的值是一个数组,因此您可以在 nib 中创建字段,但仍通过代码中的数组索引来引用它们。

另一方面,我可能仍然会在代码中创建它们,即使我比大多数 Cocoa Touch 开发人员更亲笔尖。部分原因是习惯(我仍然几乎完全是 Mac 开发人员),但部分原因是 DRY 原则。如果我在代码中循环创建字段,我可以只描述一次所有字段,以及它们的不同之处。我不会有更改一个字段而忘记(甚至只是)更新其他字段的风险,或者会更改所有字段(再次)并忘记更改一个字段的风险。

于 2012-04-26T16:53:15.290 回答
1

我会使用标签来处理这个问题:您可以在笔尖中将它们设置为 1 到 81(查找Control下的字段)。

然后-awakeFromNib你可以[self viewWithTag:i]在一个for循环中调用。

这绝对比单个网点的工作量要少,而且我认为甚至比一个网点集合更简单——填写数字意味着您不必为所有文本字段连接网点。

于 2012-04-27T02:53:11.600 回答
1

考虑 MVC 设计模式。您的计算不应直接基于视图(UI),而应基于控制器中的某些状态,该状态由视图设置。每次编辑字段时,它都会通过目标/动作或 Cocoa 绑定通知您的控制器。发生这种情况时,控制器会更新您的数据模型(在您的情况下,这意味着它会更新计算并可能将结果反映在 UI 的另一部分 - “总计”字段)。

于 2012-04-26T14:09:05.047 回答