1

我在 UIView 中创建多个 UIButton。有两个嵌套循环,以创建不同的按钮组,具有不同的形状。问题是,只有最后一个创建的 UIButton 是可见的(并且可以使用 PanGestureRecognizer 移动),即使按钮应该插入不同的位置。

- (void)viewDidLoad
{
    [super viewDidLoad];
// Do any additional setup after loading the view.

    int i, j;
    NSMutableString *backgoundImageName = [[NSMutableString alloc] init];
    NSMutableString *barTitle = [[NSMutableString alloc] init];
    sticks = [[NSMutableArray alloc] init];

    [mainView setBackgroundColor:[UIColor blackColor]];
    self.view = mainView;
    [mainView setNeedsDisplay];

    //create the bars
    UIButton *barra = [UIButton buttonWithType:UIButtonTypeRoundedRect];
    UIPanGestureRecognizer *panGestureRecognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(handlePan:)];
    [barra addTarget:self action:@selector(changeButtonTitle:) forControlEvents:UIControlEventTouchUpInside];
    [barra addGestureRecognizer:panGestureRecognizer];
    for (j = 1; j <= 10; j++) {
        backgoundImageName = [NSMutableString stringWithFormat:@"Regolo%d%@",j,@".png"];
        for (i = 1; i <= 3; i++) {
            barra.frame = CGRectMake((SQUARE_SIZE * j), (SQUARE_SIZE * 2), SQUARE_SIZE, (SQUARE_SIZE * j));
            [barra setBackgroundImage:[UIImage imageNamed:backgoundImageName] forState:UIControlStateNormal];
            [barra setTag:j];

            barTitle = [NSMutableString stringWithFormat:@"%d",j];
            [barra setTitle:barTitle forState:UIControlStateNormal];
            [barra setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
            [sticks addObject:barra];
            [self.mainView addSubview:(UIButton *)sticks.lastObject];
        }
    }
}
4

2 回答 2

1

移动这段代码:

UIButton *barra = [UIButton buttonWithType:UIButtonTypeRoundedRect]; 
[barra addTarget:self action:@selector(changeButtonTitle:) forControlEvents:UIControlEventTouchUpInside]; 
[barra addGestureRecognizer:panGestureRecognizer]; 

在你的内部 for 循环中。

您有一个对象(UIButton *barra),您正在循环内更改其属性,所以我认为最后您的所有按钮都堆叠在最后一个按钮的框架位置(以及最终的背景、标题和标签值),只有最上面是可见的。

于 2012-09-10T14:14:28.780 回答
0

您只创建一个按钮。应该是这样的:

for (j = 1; j <= 10; j++) {
    backgoundImageName = [NSMutableString stringWithFormat:@"Regolo%d%@",j,@".png"];
    for (i = 1; i <= 3; i++) {
        //create the bars
        UIButton *barra = [UIButton buttonWithType:UIButtonTypeRoundedRect];
        UIPanGestureRecognizer *panGestureRecognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(handlePan:)];
        [barra addTarget:self action:@selector(changeButtonTitle:) forControlEvents:UIControlEventTouchUpInside];
        [barra addGestureRecognizer:panGestureRecognizer];


        barra.frame = CGRectMake((SQUARE_SIZE * j), (SQUARE_SIZE * 2), SQUARE_SIZE, (SQUARE_SIZE * j));
        [barra setBackgroundImage:[UIImage imageNamed:backgoundImageName] forState:UIControlStateNormal];
        [barra setTag:j];

        barTitle = [NSMutableString stringWithFormat:@"%d",j];
        [barra setTitle:barTitle forState:UIControlStateNormal];
        [barra setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
        [sticks addObject:barra];
        [self.mainView addSubview:barra];
    }
}
于 2012-09-10T14:15:47.197 回答