首页 > 解决方案 > 在 Swift4 中创建一个函数以编程方式从字符串数组创建 UILabel

问题描述

我能够以编程方式创建一个UILabel,但是当我创建一个函数时,我必须将它放入viewDidLoad()方法中吗?我需要通过 using 将标签附加到视图,self.view.addSubview(label)但它会引发错误,然后当它在viewDidLoad().

每当我尝试在viewDidLoad方法之外创建函数时,它都会声明“使用未解析的标识符自身”。有没有办法解决?

此外,当我将函数放入viewDidLoad一切正常时,标签已创建,但它们是在彼此之上创建的。如果可能的话,我希望标签彼此相邻吗?

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.
    }

    func createALabel(inputtedString: String) -> Void {
        let string = inputtedString
        let test = string.components(separatedBy: " ")

        for element in test {
            let label = UILabel(frame: CGRect(x: 0, y: 0, width: 60, height: 35))
            label.center = CGPoint(x: 160, y: 285)
            label.textAlignment = .center
            label.textColor = UIColor.blue
            label.text = element
            label.layer.borderColor = UIColor.blue.cgColor
            label.layer.borderWidth = 3.0
            self.view.addSubview(label)
        }
    }
}

即使位置发生变化,我的标签仍在堆叠

标签: iosswiftuilabel

解决方案


您必须添加一个整数变量来设置 x 位置。在这里,我根据设置 x 位置设置了 xPos 变量

class ViewController: UIViewController {

        override func viewDidLoad() {
            super.viewDidLoad()
            // Do any additional setup after loading the view.
        }

        func createALabel(inputtedString: String) -> Void {
            let string = inputtedString
            let test = string.components(separatedBy: " ")

             let xPos = 0
            for element in test {
                let label = UILabel(frame: CGRect(x: xPos, y: 0, width: 60, height: 35))
               // label.center = CGPoint(x: 160, y: 285)
                label.textAlignment = .center
                xPos = xPos + 60 + 10   // Update xPos width 60 & 10 is gap between two label
                label.textColor = UIColor.blue
                label.text = element
                label.layer.borderColor = UIColor.blue.cgColor
                label.layer.borderWidth = 3.0
                self.view.addSubview(label)
            }
        }
    }

推荐阅读