代码之家  ›  专栏  ›  技术社区  ›  arachide

使用标签访问动态按钮

  •  0
  • arachide  · 技术社区  · 15 年前

    您好,我有一些代码可以创建动态按钮,如下所示:

    - (void)viewDidLoad {
    
        for (int i = 0; i < 9; i++)   
            for (int j = 0; j < 8; j++) {  
                forControlEvents:UIControlEventTouchDown]; 
                UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect];
                button.frame = CGRectMake(10+i*34 , 130+j*30, 30 , 20 );
                [button setTitle:@"00" forState:  UIControlStateNormal];
                [button addTarget:self action:@selector(tapped:) forControlEvents:UIControlEventTouchUpInside];
                [self.view addSubview:button];
               button.tag = i;  
            } 
    }
    

    我希望访问一个带有标签的动态按钮

    我该怎么办

    欢迎发表评论。

    感谢国际开发署

    3 回复  |  直到 15 年前
        1
  •  1
  •   Colin Gislason    15 年前

    正如Rekle所说,您的视图将被分配相同的标签。根据他的建议分配标签 (i*100)+j . 然后,要从同一类中的另一个方法中检索这些视图,可以使用 [UIView viewWithTag:] 如下:

    for (int i = 0; i < 9; i++)   
        for (int j = 0; j < 8; j++) {
            UIButton *button = [self.view viewWithTag:(i*100)+j];
            // Do more stuff here...
        }
    }
    

    这里是 Apple docs on viewWithTag .

        2
  •  1
  •   rekle    15 年前

    另一个问题是,您正在将“j”循环中创建的每个按钮设置为标记“i”。这意味着您将使用8个具有相同标记ID的按钮。您需要根据“i”和“j”索引对标记执行不同的操作。可能是这样的:

    button.tag = (i*100)+j;
    

    这样就可以从标签中提取“i”和“j”索引。

        3
  •  0
  •   ennuikiller    15 年前

    您必须进行如下检查:

    if (button.tag == 1) {
    .....do something
    }
    

    或switch语句:

    switch (button.tag)
     {
         case 1:
              statements
              break;
    
         case 2:
              statements
              break;
    
        //more case statements
    
         default:
              statements
              break;
     }