viewDidLoad 之外的闭包

Posted

技术标签:

【中文标题】viewDidLoad 之外的闭包【英文标题】:Closures outside viewDidLoad 【发布时间】:2017-09-10 05:39:01 【问题描述】:

我想创建一个没有 Storyboard 的简单应用。我在viewDidLoad 方法之外创建了一个闭包,它代表屏幕上的标题。我的问题是代码包含重复的行 view.addSubview(label) 并将标签放置在错误的位置。

你能帮我解决这个问题吗?

class HomeVC: UIViewController 
    let titleLabel: UILabel = 
        let view = UIView()
        let label = UILabel()
        label.translatesAutoresizingMaskIntoConstraints = false
        view.addSubview(label)
        label.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true
        label.centerYAnchor.constraint(equalTo: view.centerYAnchor).isActive = true
        label.text = "Hello"
        return label
    ()

    override func viewDidLoad() 
        super.viewDidLoad()

        view.addSubview(titleLabel)
    

【问题讨论】:

【参考方案1】:

我认为您想将标签设置在 HomeVC 视图的中心,上面代码中的问题是您正在创建一个新视图并将标签放置在视图内,这不是您想要的,所以

你只需像这样先制作标签:

let titleLabel: UILabel = 

            let label = UILabel()
            label.translatesAutoresizingMaskIntoConstraints = false

            label.text = "Hello"
            return label
        ()

然后在viewDidLoad 中将此标签添加为视图的子视图并应用约束

override func viewDidLoad() 
    super.viewDidLoad()
        view.addSubview(titleLabel)
        setupTitleLabel()


func setupTitleLabel() 
        titleLabel.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true
        titleLabel.centerYAnchor.constraint(equalTo: view.centerYAnchor).isActive = true
        //you also need to give the label height and width constraints to label here...

【讨论】:

感谢您的回答。它有效,我只是想在 viewDidLoad 中添加最少的代码。

以上是关于viewDidLoad 之外的闭包的主要内容,如果未能解决你的问题,请参考以下文章

访问闭包之外的数据

Swift - 我如何在闭包之外返回数组值?

iOS Swift 如何访问在完成处理程序闭包中创建的数据——在闭包之外

结构数组在闭包之外没有更新

访问闭包Swift3之外的变量

我如何在闭包之外访问数组?