如何根据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中的标签文本(动态)增加单元格高度

Objective-c 中的可缩放按钮

如何根据后面的输入添加更多的标签?

如何在 Objective-C 中使用 buttonWithType 添加按钮样式?

需要在“更多”按钮所在的标签栏项目中添加图像

如何把纯化标签加上去