Swift - 自动在刚添加的按钮右侧添加一个按钮

时间:2016-03-29 21:21:58

标签: swift uiscrollview uibutton cgrectmake

我有一个UIScrollView设置,并使用addSubView添加5个按钮。这是我的viewDidLoad中的代码。

    let codedButton:UIButton = UIButton(frame: CGRectMake(0, 0, 100, 50))
    codedButton.backgroundColor = UIColor.redColor()
    codedButton.setTitle("Button 1", forState: UIControlState.Normal)
    codedButton.addTarget(self, action: #selector(ViewController.buttonAction(_:)), forControlEvents: UIControlEvents.TouchUpInside)
    codedButton.tag = 1
    self.buttonScrollView.addSubview(codedButton)

    let codedButton2:UIButton = UIButton(frame: CGRectMake(110, 0, 100, 50))
    codedButton2.backgroundColor = UIColor.redColor()
    codedButton2.setTitle("Button 2", forState: UIControlState.Normal)
    codedButton2.addTarget(self, action: #selector(ViewController.buttonAction(_:)), forControlEvents: UIControlEvents.TouchUpInside)
    codedButton2.tag = 2
    self.buttonScrollView.addSubview(codedButton2)

(一直到5。)

我需要帮助的问题是......最终,这些按钮将被动态显示。不只是一定数量的5。

如何调整CGRectMake的X值以自动“浮动”刚刚创建的按钮右侧的新按钮?在上面的代码中,我明确说明了X的位置,但是一旦这些按钮在代码中动态创建,这将无法正常工作。

修改 澄清我上面的问题: 我附上了一张图片。注意按钮总是如何水平堆叠/ next ,无论是否有2 3 4或5.这些按钮将动态显示。因此,根据我上面提供的代码尝试,它将无法工作,因为它明确设置了将按钮放在X轴上的位置。

我需要修改我的代码才能执行如下图所示的操作。 I need my code edited so that it automatically stacks the new buttons horizontally.

3 个答案:

答案 0 :(得分:1)

我看到你正在以编程方式执行此操作。我无法帮助代码,但故事板中的堆栈视图非常棒。我的应用程序中有一个功能,我有4个按钮,但用户可能只看到4个按钮中的2个。

1)将按钮水平添加到故事板中(它们不需要完全对齐,只需足以让Xcode识别它的水平而不是垂直。

2)选择所有5个按钮

3)点击Xcode右下角的堆栈视图按钮(带有4条水平线的按钮,箭头指向下方。

4)在属性检查器中,选择水平作为轴,对齐为中心,按比例填充,使用间距播放,并选择缩放作为模式填充。

5)在Swift文件中,您可以使用button.hidden = true / false

添加或隐藏按钮

注意:请记住,堆栈视图仅适用于上次检查时的iOS 9

答案 1 :(得分:1)

下面是一个循环示例,您可以添加到当前实现的一个按钮,以添加任意数量的按钮,在此示例中,按钮的数量取决于您添加到的按钮名称的数量数组名为“buttonList”。对于循环的每次迭代,它将从ButtonList中的文本命名按钮,并将标记设置为数组中的索引。然后它将计算你的帧的x坐标,在这个例子中,我使每个按钮宽100px,中间有10px空间,从x坐标位置0开始。如果你想在第一个按钮和第一个按钮之间增加10px空间视图的前沿只是在计算x坐标时增加索引: let xCoord = CGFloat(index*buttonWidth + (index+1)*buttonSpace)

您还需要增加滚动视图的大小以适应按钮,因为添加了更多内容,这是我用于设置滚动视图宽度的计算(如果向滚动条添加前导空格,则将buttonSpace宽度增加1查看):buttonScrollView.contentSize = CGSizeMake(CGFloat((ButtonList.count * buttonWidth) + ((ButtonList.count + 1) * buttonSpace)), 50)

var ButtonList = ["Button 1", "Button 2", "Button 3"]
let buttonWidth = 100
let buttonSpace = 10
for (index,ButtonText) in ButtonList.enumerate(){
    //calculate the x coordinate of each button
    let xCoord = CGFloat(index*buttonWidth + index*buttonSpace)
    let codedButton:UIButton = UIButton(frame: CGRectMake(xCoord, 0, 100, 50))
    codedButton.backgroundColor = UIColor.redColor()
    codedButton.setTitle(ButtonText, forState: UIControlState.Normal)
    codedButton.addTarget(self, action: #selector(ViewController.buttonAction(_:)), forControlEvents: UIControlEvents.TouchUpInside)
    codedButton.tag = index
    self.buttonScrollView.addSubview(codedButton)
    }

答案 2 :(得分:0)

我不确切地知道这是不是你要求的......如果没有,请发表评论。

创建counter并命名您的按钮..

button.name = "name\(counter)"

使用..

获取最后一个按钮的位置
let position = self.childNodeWithName("name\(counter)")?.position

设置新按钮的位置..

newButton.position = CGPointMake(position.x + newButton.frame.size.width/2 + oldButton.frame.size.width/2, position.y)

..您的新按钮现已设置为添加的最后一个按钮