如何在swift中使用for循环以编程方式创建按钮

Posted

技术标签:

【中文标题】如何在swift中使用for循环以编程方式创建按钮【英文标题】:How to create a button programmatically with for loop in swift 【发布时间】:2021-03-31 20:38:57 【问题描述】:

我使用 for 循环创建了按钮,并且我想在按下按钮时打印按钮编号。我该怎么做?

for x in 0..<5 
   let button = UIButton(frame: CGRect(x: CGFloat(x) * view.frame.size.width + 10 , y: 40, width: view.frame.size.width - 20, height: 30))
   buttonKontrol = x
   print(buttonKontrol)
   button.setTitle("Button", for: .normal)
   button.backgroundColor = .white
   button.setTitleColor(.black, for: .normal)
        
   button.addTarget(self, action: #selector(btntapped), for: .touchUpInside)
   scrollView.addSubview(button)

和 objc 函数:

@objc func btntapped(_ sender: UIButton) 
    print("button tapped")

【问题讨论】:

【参考方案1】:

有多种方法可以做到这一点...

    找到点击按钮的框架(不是一个好方法,但对于您的简单示例,它可以工作) 使用按钮的.tag 属性 评估按钮的.currentTitle 属性 将按钮添加到数组中...点击时,使用let buttonNumber = btnsArray.firstIndex(of: sender)

【讨论】:

【参考方案2】:

有很多方法,但“Swifty”的方法可能是这样的:

final class TargetAction 
    let work: () -> Void

    init(_ work: @escaping () -> Void) 
        self.work = work
    

    @objc func action() 
        work()
    

    
class ViewController: UIViewController 
    private var tas: [TargetAction] = []
    
    override func viewDidLoad() 
        super.viewDidLoad()
        
        (0...4).forEach  x in
            let button = UIButton(frame: CGRect(x: CGFloat(x) * 50 , y: 40, width: 44, height: 44))
            button.setTitleColor(.black, for: .normal)
            button.setTitle("\(x)", for: .normal)
            let ta =
                TargetAction 
                    print(x)
                
            tas.append(ta)
            button.addTarget(ta, action: #selector(TargetAction.action), for: .touchUpInside)
            view.addSubview(button)
        
    

【讨论】:

以上是关于如何在swift中使用for循环以编程方式创建按钮的主要内容,如果未能解决你的问题,请参考以下文章

Swift以编程方式制作宽度百分比

以编程方式添加约束以防止按钮重叠 SWIFT 4

Swift 自动布局以编程方式和动态

如何以编程方式创建按钮?

如何更改以编程方式创建的一组 UIButton 的标题颜色?

如何在 Swift 4 中以编程方式将 IBAction 添加到按钮?