【问题标题】:How to reference an objects id with a variable? [duplicate]如何使用变量引用对象 id? [复制]
【发布时间】:2012-03-27 15:56:24
【问题描述】:

这是我的代码,它出现了 48 次(日历中的每个按钮一个)。

calenderButton *a1 = [calenderButton buttonWithType:UIButtonTypeCustom];
[a1 makeFrame:CGRectMake(75, 50, 70, 70) number:1 color:[UIColor orangeColor]];
[self.view addSubview:a1];

我想做的是把它放在一个“for循环”中,将“a1”更改为“a2”、“a3”等,以减少代码量。我想我可以将它减少到 6 个“for 循环”。

如何让“a1”成为一个变量,然后我不仅可以在上面的代码中引用,还可以在“for 循环”中引用它? (for 循环是这样的:)

for(int i = 0, j=75; i < 7; i++, j+=75);

我知道我必须将“a”与整数“i”连接起来,但是如何将它放在消息中?

【问题讨论】:

标签: objective-c


【解决方案1】:

您可以将按钮放入数组中,如下所示:

在你的头部声明一个实例变量NSMutableArray *allButtons,然后...

allButtons = [NSMutableArray array];
for(int i = 0, j=75; i < 7; i++, j+=75) {
    calenderButton *cb= [calenderButton buttonWithType:UIButtonTypeCustom];
    // Configure the button here...
    // use values of i and j to call CGRectMake, or as you see fit
    [allButtons addObject:cb];
}

现在您所有的按钮都在一个数组中。您可以通过索引或您可能需要的任何其他方式访问它们,例如具有快速枚举循环。

【讨论】:

  • 谢谢...像冠军一样工作!
【解决方案2】:

即使您使用相同的(本地)变量,您的代码也会创建 48 个不同的按钮:

for (int i = 0; i < 48; i++){
    calenderButton *a1 = [calenderButton buttonWithType:UIButtonTypeCustom];
    [a1 makeFrame:CGRectMake(75, 50, 70, 70) number:1 color:[UIColor orangeColor]];
    [self.view addSubview:a1];
}

如果要保留对按钮的引用,可以将它们存储在数组中:

self.buttons = [NSMutableArray array];
for (int i = 0; i < 48; i++){
    calenderButton *a1 = [calenderButton buttonWithType:UIButtonTypeCustom];
    [a1 makeFrame:CGRectMake(75, 50, 70, 70) number:1 color:[UIColor orangeColor]];
    [self.view addSubview:a1];
    [self.buttons addObject:a1];
}

然后像这样访问它们:

calenderButton *button = [self.buttons objectAtIndex:7]; // Or any other index

注意,你可以使用你提到的循环:

for(int i = 0, j=75; i < 7; i++, j+=75)

但我不确定这会产生 48 个按钮。

【讨论】:

  • sch:它如何添加 48 个不同的按钮?每个都必须有一个唯一的标识符,以便我可以引用它......在这种情况下,它们都被称为“a1”,对吧?
  • @spokane-dude:实际上,没有。这会添加 48 个不同的按钮,因为您创建了 48 个不同的按钮。该名称在全局范围内不是唯一的,仅在循环范围内。要引用一个按钮,您可以使用 [[self buttons] objectAtIndex:7]; 这基本上就是您要查找的 a7 按钮,但它不能通过 a7 指针获得
  • 没关系,我不能通过 a7 指针引用...我需要能够从任何生成的按钮中添加和删除对象(标签和符号)...
  • 正如@ColdLogic 所说,您可以使用它们在数组中的索引来引用它们。
  • 一个额外的提示:当处理一堆相似的视图(比如你的日历设置)时,将它们分组到一个包含视图中并给每个视图一个唯一的整数标签通常很有用——然后你可以参考给他们viewWithTag:。
猜你喜欢
  • 2011-04-02
  • 1970-01-01
  • 2015-09-03
  • 2017-10-27
  • 2011-06-19
  • 2013-08-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多