如何在View Controller中创建UI元素

时间:2015-06-19 08:01:52

标签: ios swift class cocoa-touch

我正在制作应用,我正在尝试创建一个包含带问题标签的视图。我想在我的应用程序中看到这个视图,因为我会反复使用它,我做了一个课程(如果我想做一些改变,我可以从一个地方做到)。 UIView被称为questionViewvar questionView = UIView())。问题是当我想questionView view的子视图时。错误说我没有“理解”,我理解。我没有观点,但我怎么能得到它?谢谢

这是我的问题类中的内容:

import Foundation
import UIKit

class Question {

    // PROPERTIES:

    var questionLabel = UILabel()
    var questionView = UIView()

    // METHODS:

    func createQuestion (input:String) {

        // some code .... not important

        // THIS:
        self.view.addSubview(questionView)

    }

    // ... next code, also not important
}

更新

有我的解决方案。它工作但我认为从编程的角度来看它是不正确的。谁能跟我说说什么呢?谢谢

我的班级在单独的swift文件中:

我的班级在单独的swift文件中:

class LabelClass {

    var view = UIView()

    init (view: UIView) {
        self.view = view
    }

    var lbl = UILabel()
    var lblView = UIView()

    func makeLabel () {

        self.lbl.frame = CGRectMake(0, 0, 150, 50)
        self.lbl.text = "Text text text"
        self.lbl.numberOfLines = 0

        self.lblView.frame = CGRectMake(20, 20, 150, 50)

        self.lblView.addSubview(self.lbl)
        self.view.addSubview(lblView)

    }

}

一段代码我的ViewController.swift:

override func viewDidLoad() {
    super.viewDidLoad()

    // Added code:
    var object = LabelClass(view: self.view)
    object.makeLabel()

}

2 个答案:

答案 0 :(得分:1)

我不知道Swift,但据我所知,只有UIViewController的实例有view属性,而类Question没有,所以你不能添加子视图。 您可能想要的是创建包含问题标签的UIView的子类,或者将questionLabel添加为questionView的子视图。

答案 1 :(得分:1)

这是因为您正在尝试将视图添加到没有self.view实例的普通Swift类中。您的Question类必须是UIViewController cocoa类的子类,它具有self.view实例和覆盖方法。

class Question:UIViewController {

    // PROPHERITIES:

    var questionLabel = UILabel()
    var questionView = UIView()

    // METHODS:
    override func viewDidLoad() {
         createQuestion("foo")
    }

    func createQuestion (input:String) {

        // some code .... not important

        // THIS:
        self.view.addSubview(questionView)

    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }

    // ... next code, also not important
}