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

Swift - Automatically adding a button to the right of the button just added

我设置了一个 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 轴上放置按钮的位置。

我需要修改我的代码才能像下图那样执行。

我不知道这是否正是您要的。如果不是,请发表评论。

创建一个 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)

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

我看到您正在以编程方式执行此操作。我帮不上代码,但情节提要中的堆栈视图很棒。我的应用程序中有一个功能,其中有 4 个按钮,但用户可能只能看到 4 个按钮中的 2 个。

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

2) Select 所有 5 个按钮

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

4) 在属性检查器中,选择水平为轴,对齐为中心,按比例填充,调整间距,选择比例填充为模式。

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

添加或隐藏按钮

注意:请记住,堆栈视图仅在 iOS 9 我上次检查时可用

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

您还需要增加滚动视图的大小以适应添加更多按钮,这是我用于设置滚动视图宽度的计算(如果添加前导 [=,则将 buttonSpace 宽度增加 1 18=] 到你的滚动视图):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)
    }