子类化UIview问题

时间:2016-10-31 19:17:22

标签: swift uiview

我的视图控制器上有一个UIView。我想在屏幕上以编程方式绘制一些标签。所以我认为我可以将它和那个类子类化为UIView。

我的代码:

import Foundation
import UIKit

class MainBottomView : UIView{

    required init?(coder aDecoder: NSCoder) {
        super.init(frame: UIScreen.main.bounds);

        generateLabel(CGRect(x: 5, y: 363, width: 310, height: 62),tekst: "")
        return;
    }

    func generateLabel(_ fr: CGRect,tekst: String){

        let l = UILabel(frame: fr)
        l.backgroundColor = UIColor(red: (21/255.0),green: (185/255.0),blue:(201/255.0),alpha:1)
        l.textAlignment = NSTextAlignment.center
        l.text = tekst
        l.textColor = UIColor.white
        l.font = UIFont(name: "HelveticaNeue", size: 23)
        self.addSubview(l)
    }
}

但它在所需的init崩溃了吗?行。我不知道为什么会这样。或者我是否以错误的方式使用子类化?

非常感谢!

2 个答案:

答案 0 :(得分:1)

如果您的UIView来自storyboard / nib,则init?(coder:) 是初始化程序。这就是你的代码需要去的地方。

事实上,你的init可能永远不会运行。 UIView的两个指定初始化器是init(frame:)(对于在代码中创建的UIView)和init(coder:)(对于从故事板创建的视图)。那些是你需要覆盖的。

答案 1 :(得分:1)

您可以使用下面的代码来获取想法(Xcode 8.1(8B62))删除故事板,启动画面,清除属性主要故事板和Info.plist中的Launchscreen,并将AppDelegate.swift替换为以下内容

import UIKit

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
    var window: UIWindow?
    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
        self.window = UIWindow(frame: UIScreen.main.bounds)
        self.window!.rootViewController = ViewController()
        self.window!.makeKeyAndVisible()
        return true
    }
}

class ViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()
        self.view.addSubview(MainBottomView())
    }
}

class MainBottomView : UIView{
    required init?(coder: NSCoder) {super.init(coder: coder)}
    init() {
        super.init(frame: UIScreen.main.bounds);
        generateLabel(CGRect(x: 5, y: 363, width: 310, height: 62),tekst: "test")
    }

    func generateLabel(_ fr: CGRect,tekst: String){

        let l = UILabel(frame: fr)
        l.backgroundColor = UIColor(red: (21/255.0),green: (185/255.0),blue:(201/255.0),alpha:1)
        l.textAlignment = NSTextAlignment.center
        l.text = tekst
        l.textColor = UIColor.white
        l.font = UIFont(name: "HelveticaNeue", size: 23)
        self.addSubview(l)
    }
}