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)
}
我设置了一个 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)
}