区分动态生成的按钮

时间:2013-03-05 16:10:06

标签: iphone ios objective-c arrays cocoa-touch

我在视图控制器上有十个选项,每个选项都“推”到显示特定数量按钮的同一个新视图控制器(每个选项的可以提供不同数量的按钮,范围从3个按钮到15 )。目前,我的代码与this question上发布的答案类似。

使用for循环为每个选项动态创建所有这些按钮(显然取决于数组的长度):

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    if(option 1) {
    Array contains different values...
    }

    if(option 2) {
    Array contains different values...
    }

    etc...

    for(int i = 0; i < xCoordinatePosition.count; i++) {
       UIButton *imageOne = [UIButton buttonWithType:UIButtonTypeCustom];
       [imageOne setTag:i];
       [imageOne addTarget:self action:@selector(webViewChanged:) forControlEvents:UIControlEventTouchUpInside];
    }
}

正如您所看到的,我为每个按钮设置了一个标记,以区分动态创建的按钮,因为我希望每个按钮在选中时显示不同的UIWebView

当我选择一个选项和NSLog结果页面上每个按钮的结果标签时,我得到了我之后的回复:1,2,3等。

- (IBAction)webViewChanged:(UIButton*)sender
{
    NSLog(@"%d", sender.tag);
}

问题是,我希望每个按钮的所有选项按钮的唯一编号 - 目前我的十个选项中的每一个都返回带有标签1,2,3等的按钮。到十,而我需要第一个选项返回1-10,第二个选项返回11-20等,因为每个单独的按钮将返回一些独特的。

例如:

在一个选项上单击标记为7的按钮将显示一个完全不同的Web视图,点击另一个标记为7的按钮,因此我需要区分每个按钮。

有没有人知道如何设置标签,以便每个选项都是唯一的(而不是像当前一样将当前所选选项的每个按钮设置为唯一)?

2 个答案:

答案 0 :(得分:2)

只需使用另一个integerVariable,其值为10的倍数。

int factor;
if(option 1)
{
   factor = 0;
}
if(option 2)
{
   factor = 10;
} 
etc..

然后将标签放入,

[imageOne setTag:i+factor];

答案 1 :(得分:1)

如果我理解你的问题,解决问题的一种方法是为每个选项设置一个基本标签,如100,200,......

所以,在你的prepareForSegue

int baseTag;

if(option 1) {
  // Array contains different values...
  baseTag = 100;
}

if(option 2) {
  // Array contains different values...
  baseTag = 200;
}

// etc...

在for循环中,只需:

[imageOne setTag: baseTag + i];

对于选项1,您的图像标签将从101开始,对于选项2,从201等开始