我可以在for循环中使用“buttoni”访问名为“button1”“button2”“button3”等的元素/方法吗?

时间:2010-06-09 05:09:55

标签: objective-c oop programming-languages

我有一堆名为的按钮:

button1
button2
button3
etc.

有没有办法基本上这样做?

pseudocode
for(int i = 1, i < 15, i++) {
    button{i}.selected = YES;
}

这也适用于方法调用等。我经常认为这种调用方法的方式非常方便,但我认为在使用编译语言时我从未见过它。但我使用PHP完成了它。

在Objective-C中有没有办法做到这一点? (这就是我现在的问题所在,但如果你能用其他语言做到这一点,我也会感兴趣。)或者,有没有理由说这不是一个访问所有UI元素的好方法?

谢谢!

1 个答案:

答案 0 :(得分:2)

在目标C中,您可以将元素放在NSArray中,更常见的是对于任何语言,将要迭代的元素放在集合中。

如果您真的想用动态名称做可爱的事情,请使用NSDictionary并通过字符串名称查找;这几乎就是PHP用它的$$ foo语法做的事情。

#import <Foundation/Foundation.h>

int
main()
{
  NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
  id button1 = @"this is button 1";// not actually buttons, but same principle
  id button2 = @"this is button 2";
  id button3 = @"this is button 3";

  NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:
                     button1, @"button1",
                     button2, @"button2",
                     button3, @"button3"];

  int i;
  for (i = 1; i <= 3; ++i) {
    // you can send messages to these objects instead of NSLogging them
    NSLog([dict objectForKey: [NSString stringWithFormat:@"button%d", i]]);
  }
}