如何根据objective-C中的标签号将按钮添加到MutableArray?
Posted
技术标签:
【中文标题】如何根据objective-C中的标签号将按钮添加到MutableArray?【英文标题】:How to add a buttons to a MutableArray according to their tag number in objective-C? 【发布时间】:2012-03-23 19:09:35 【问题描述】:我有一个视图包含许多部分(按钮组)视图中的每个部分都包含唯一的 id,我想根据它们的 id 将按钮添加到 NSMutableArray,(即当用户单击按钮时,我得到按钮 id然后将所有按钮都添加到数组中)我写了这些代码,但是当我在添加后检查数组的长度时发现它是 0 !! 提示:sec_0,sec_1,sec_2,sec_3,sec_4,sec_5,sec_6,sec_7,sec_8 是一个预定义的 NSMUtable 数组。
-(NSMutableArray*)findButtonsSection:(UIButton *)buton
NSLog(@"Inside findButtonsSection");
int tag_No=buton.tag;
for (UIButton* bton in self.view.subviews)
NSLog(@"Inside findButtonsSection2");
switch (tag_No)
case 0:
[sec_0 addObject:bton];
NSLog(@"Number of buttons in array=%i",[sec_0 count]);
break;
case 1:
NSLog(@"Button tag No=%i",buton.tag);
[sec_1 addObject:bton];
return sec_1;
break;
case 2:
NSLog(@"Button tag No=%i",buton.tag);
[sec_2 addObject:bton];
return sec_2;
break;
case 3:
NSLog(@"Button tag No=%i",buton.tag);
[sec_3 addObject:bton];
return sec_3;
break;
case 4:
NSLog(@"Button tag No=%i",buton.tag);
[sec_4 addObject:bton];
return sec_4;
break;
case 5:
NSLog(@"Button tag No=%i",buton.tag);
[sec_5 addObject:bton];
return sec_5;
break;
case 6:
NSLog(@"Button tag No=%i",buton.tag);
[sec_6 addObject:buton];
return sec_6;
break;
case 7:
NSLog(@"Button tag No=%i",buton.tag);
[sec_7 addObject:bton];
return sec_7;
break;
case 8:
NSLog(@"Button tag No=%i",buton.tag);
[sec_8 addObject:bton];
return sec_8;
break;
default:
NSLog(@"nnnnnnnnnn");
【问题讨论】:
"当我在添加后检查数组的长度时发现它为 0" 你检查了哪个数组?您的代码在将 1 项添加到任何不是 sec_0 的数组后返回。 似乎是这样,我该怎么做才能添加所有具有指定 id 的按钮而不是添加一项? 从交换机中移除return sec_#
部分。用更新的代码检查我的答案
【参考方案1】:
在构造完这些 sec_x 可变数组后,将它们组成一个 C 数组。像这样:
NSMutableArray *secs[] = sec_0, sec_1....;
然后使用索引而不是开关:
[secs[tag_No] addObject:bton];
本例中的方括号表示数组元素访问,而不是 Objective C 方法调用。
一般来说,阅读普通的旧 C。Objective C/ios 教程通常假设您有一定的 C 背景,并从解释 Objective C 对象系统开始,而不是 C 位.
【讨论】:
你不是说NSMutableArray *
吗? NSMutableArray
是一个不完整的类型。【参考方案2】:
您的数组全部为空的原因是您在将任何值添加到不是 sec_0 的数组后返回。你不想要这些回报,因为它会打破你的 for 循环。试试下面的代码:
您还可以切换数组以节省一些代码行并提高可读性。
-(NSMutableArray *)findButtonSelections:(UIButton *)button
NSArray *array = [NSArray arrayWithObjects:sec_0, sec_1, sec_2, sec_3, sec_4, sec_5, sec_6, sec_7, sec_8, nil];
int tag = button.tag;
//BTW, this function will return all views, not just buttons
for (UIButton* bton in self.view.subviews)
//So add this to make sure the view is a button
if([bton isKindOfClass:[UIButton class]])
[[array objectAtIndex:tag] addObject:bton];
return [array objectAtIndex:tag];
如果你想保留你的开关代码,试试下面这个,但我不推荐它。
-(NSMutableArray *)findButtonSelections:(UIButton *)button
NSLog(@"Inside findButtonsSection");
int tag_No=buton.tag;
for (UIButton* bton in self.view.subviews)
NSLog(@"Inside findButtonsSection2");
switch (tag_No)
case 0:
[sec_0 addObject:bton];
NSLog(@"Number of buttons in array=%i",[sec_0 count]);
break;
case 1:
NSLog(@"Button tag No=%i",buton.tag);
[sec_1 addObject:bton];
break;
case 2:
NSLog(@"Button tag No=%i",buton.tag);
[sec_2 addObject:bton];
break;
case 3:
NSLog(@"Button tag No=%i",buton.tag);
[sec_3 addObject:bton];
break;
case 4:
NSLog(@"Button tag No=%i",buton.tag);
[sec_4 addObject:bton];
break;
case 5:
NSLog(@"Button tag No=%i",buton.tag);
[sec_5 addObject:bton];
break;
case 6:
NSLog(@"Button tag No=%i",buton.tag);
[sec_6 addObject:buton];
break;
case 7:
NSLog(@"Button tag No=%i",buton.tag);
[sec_7 addObject:bton];
break;
case 8:
NSLog(@"Button tag No=%i",buton.tag);
[sec_8 addObject:bton];
break;
default:
NSLog(@"nnnnnnnnnn");
return [array objectAtIndex:tag];
【讨论】:
"去掉按钮参数",那么如何确定按下的按钮的标签号! 在我重新阅读您的原始问题后,我甚至在您评论将其放回原处之前编辑了该问题:P 但是无论如何,如果您删除了按钮参数,如果您只是根据每个按钮的标签进行切换,而不是仅填充 1 个数组,则可以使用其按钮填充所有数组以上是关于如何根据objective-C中的标签号将按钮添加到MutableArray?的主要内容,如果未能解决你的问题,请参考以下文章
根据单元格OBjective-C中的标签文本(动态)增加单元格高度