Могу ли я получить доступ к элементам / методам с именем "button1" "button2" "button3" и т. Д., Используя "buttoni" внутри цикла for? - PullRequest
0 голосов
/ 09 июня 2010

У меня есть набор кнопок с именем:

button1
button2
button3
etc.

Есть ли способ сделать это в основном?

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

Это также относится к вызовам методов и т. Д. Я часто думал, что такой способ вызова методов был бы очень удобен, но я не думаю, что когда-либо видел, как это делается при использовании компилируемых языков. Но я сделал это с помощью PHP.

Есть ли способ сделать это в Objective-C? (Вот где моя проблема сейчас, но мне также было бы интересно, если бы вы могли сделать это на других языках.) С другой стороны, есть ли причина, почему это НЕ хороший способ получить доступ ко всем элементам пользовательского интерфейса?

Спасибо!

1 Ответ

2 голосов
/ 09 июня 2010

В задаче 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]]);
  }
}
...