如何从for循环创建多个UIButtons

时间:2015-08-07 13:01:44

标签: ios objective-c uibutton

我正在尝试创建UIbuttons的垂直列表。我已设法使用以下代码在屏幕的左上角创建一个UIButton

-(void)didMoveToView:(SKView *)view {

UIButton * btn = [UIButton buttonWithType:UIButtonTypeRoundedRect];
btn.frame = CGRectMake(0, 0, 100, 50);
[btn setTitle:@"Hello, world!" forState:UIControlStateNormal];
[self.view addSubview:btn];

}

然而,当我尝试增加按钮数量并将它们放在屏幕中间时,它们不会出现。我试图使用的代码如下:

-(void)didMoveToView:(SKView *)view {
/* Setup your scene here */
map = [SKNode node];
midScreenX = CGRectGetMidX(self.frame);
midScreenY = CGRectGetMidY(self.frame);

UIButton * btn = [UIButton buttonWithType:UIButtonTypeRoundedRect];
btn.frame = CGRectMake(0, 0, 100, 50);
[btn setTitle:@"Hello, world!" forState:UIControlStateNormal];
[self.view addSubview:btn];

for (int i = 0; i<numberOfLevels; i += 1) {

    UIButton * btn2 = [UIButton buttonWithType:UIButtonTypeRoundedRect];
    btn2.frame = CGRectMake(midScreenX, midScreenY + separation*i, 100, 50);
    [btn2 setTitle:@"Hello, world!" forState:UIControlStateNormal];
    [self.view addSubview:btn2];

}

}

我在方法之外定义了变量separation和numberOfLevels,全局范围分别为160和20。

当我使用第二个代码时,与使用第一个代码时相比没有任何变化。

我对目标c很新,可能会犯一个非常简单的错误。这些buttons显然会偏离屏幕的顶部,感谢任何能告诉我如何创建scroll效果以便我可以移动按钮的人。目前,我正在使用非常基本的代码,只需移动屏幕就可以触摸屏幕。我认为,鉴于它在应用程序中的普及,有更优雅的方式。

提前感谢您的帮助。

3 个答案:

答案 0 :(得分:1)

使用Autolayout,您可以签出此代码。

    UIButton *previousButton = nil;

    for (NSInteger i = 0; i<numberOfLevels; i++)
    {
        UIButton *btn = [UIButton buttonWithType:UIButtonTypeRoundedRect];

        [self.view addSubview:btn];

        if (i == 0)
        {
            [btn addConstraint:[NSLayoutConstraint constraintWithItem:btn attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeTopMargin multiplier:1 constant:seperation]];
        }
        else
        {
            [btn addConstraint:[NSLayoutConstraint constraintWithItem:btn attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:previousButton attribute:NSLayoutAttributeTop multiplier:1 constant:seperation]];
        }

        [btn addConstraint:[NSLayoutConstraint constraintWithItem:btn attribute:NSLayoutAttributeLeading relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeLeading multiplier:1 constant:seperation]];
        [btn addConstraint:[NSLayoutConstraint constraintWithItem:btn attribute:NSLayoutAttributeTrailing relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeTrailing multiplier:1 constant:seperation]];

        [btn addConstraint:[NSLayoutConstraint constraintWithItem:btn attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationEqual toItem:nil attribute:NSLayoutAttributeHeight multiplier:1 constant:50]];

        previousButton = btn;
    }

答案 1 :(得分:0)

如果有效,你可以检查一下:

{{1}}

答案 2 :(得分:0)

您的代码相对正确,除了separationnumberOfLevels的相当大的价值 对于iPhone 5 / 5s(屏幕高度为568pt,您应该只看到左上角的一个按钮和中间的两个按钮。

this is how your screen should looks like

这就是你的屏幕应该是这样的,所以问题出在

之外的某个地方

在运行时调试你的视图你可以在Xcode中使用小但非常有用的按钮

enter image description here

更多关于此: https://developer.apple.com/library/ios/recipes/xcode_help-debugger/using_view_debugger/using_view_debugger.html