如何在 UIStackview 中添加和删除 UILabel

Posted

技术标签:

【中文标题】如何在 UIStackview 中添加和删除 UILabel【英文标题】:How to add and remove UILabels in UIStackview 【发布时间】:2019-07-28 11:35:01 【问题描述】:

我想在 UIStackview 中添加和删除 UILabel。添加的 UILabel 的数量将取决于字符串的长度(例如,如果字符串是 SMITH,则应在 UIStackview 中添加 5 个 UILabel。当用户单击下一步按钮时,应删除所有 5 个 UILabel,下一个生成的 UILabel 将取决于在下一个字符串上。

我创建了一个函数,它将新的 UILabel 添加到 UIStackview,并且它仅作为用户第一次使用它才能正常工作。但是由于用户将在第二次单击下一步按钮,我使用的代码没有删除旧的 UILabel,但它仍然在 UIStackview 中添加新的 UILabel。

@IBAction func btnNext(_ sender: UIButton) 

        removeLabel()
        for i in 0...countArray.count 
            if i == count 
                for j in 1...countArray[i] 
                    label.tag = j
                    text.tag = j
                    createLabel(x: x, y: y, width: width, height: 1)
                    createText(x: x, y: y, width: width, height: 30)
                    x += width + 5
                
            
        
        count += 1
    


//Mark:- for removing the old UILable
  func removeLabel() 
        label.removeFromSuperview()
    

错误:- 当用户第二次点击下一步按钮时,它应该删除旧的 UILabel,它不是删除,而是添加基于新的 UILabel

结果:- 它应该根据字符串长度(字符数)添加新的 UILabel,当用户单击下一步时,还需要删除旧的 UILabel 并根据字符串长度(字符数)再次添加新的 UILabel

【问题讨论】:

在上面的代码中,你添加/删除了一个标签。但是在问题描述中,您说要添加多个标签。请澄清。 @PGDev 是的,我想删除多个 UILabel 在下面添加了答案。检查一下。 【参考方案1】:

btnNext(_:) 应该是这样的,

@IBAction func btnNext(_ sender: UIButton) 
    let str = "SMITH"
    self.stackView.subviews.forEach( stackView.removeArrangedSubview($0) )
    str.forEach  (char) in
        let label = UILabel()
        label.text = String(char)
        stackView.addArrangedSubview(label)
    

上面的代码是一个例子。尝试将其与您自己的代码一起使用。

【讨论】:

以上是关于如何在 UIStackview 中添加和删除 UILabel的主要内容,如果未能解决你的问题,请参考以下文章

以编程方式在 UIStackView 中添加视图

在 StackView 内动态添加 ViewControllers - UIScrollView 内的 UIStackView

如何在 UIScrollView 中添加 UIStackView

UIStackView 在 tableView Cell didSet 中添加排列子视图

如何用图像作为背景填充 iOS 堆栈视图(UIStackView)?

检测 UIStackView 间距中的点击(项目之间)