循环使用类似命名的UI元素 - 可能是从名称中获取变量?

Tho*_*ten 0 cocoa objective-c

我使用Interface Builder为视图添加了许多标签.我还有一些我想要显示的值.

有没有比使用此代码更好的方法来设置标签:

lblTotal1.text = [NSString stringWithFormat: @"%i Seconds", (int) round(fTimeTotal[1])];
lblTotal2.text = [NSString stringWithFormat: @"%i Seconds", (int) round(fTimeTotal[2])];
lblTotal3.text = [NSString stringWithFormat: @"%i Seconds", (int) round(fTimeTotal[3])];
lblTotal4.text = [NSString stringWithFormat: @"%i Seconds", (int) round(fTimeTotal[4])];
Run Code Online (Sandbox Code Playgroud)

我想做的是这样的事情:

for (int i = 1; i<5; i++) {
    lblTotal[i].text = [NSString stringWithFormat: @"%i Seconds", (int) round(fTimeTotal[i])];
}
Run Code Online (Sandbox Code Playgroud)

但是我必须能从它的名字中得到一个变量.我怎样才能做到这一点?

Rob*_*ier 6

您可以将IBOutlet挂钩在IB中的IBOutletCollection中(选择一堆并将它们拖到源代码中;它应该提供一个集合).虽然IBOutletCollection在技术上是一个有序列表(数组),但它实际上是随机排序的.

一旦您将所有IBOutlet连接到一个IBOutletCollection中,您仍然需要知道哪个是哪个.您可以使用tag,这是您可以在IB中设置的字段之一.一旦您标记了所有内容,您的代码将是:

for (UILabel *label in self.labelCollection) {
  int value = (int)roundf(fTimeTotal[label.tag]);
  label.text = [NSString stringWithFormat:@"%i Seconds", value];
}
Run Code Online (Sandbox Code Playgroud)