Swift 子类化UIview问题
我的视图控制器上有一个UIView。我想在屏幕上以编程方式绘制一些标签。所以我想我可以将其子类化,并在该类中将其子类化为UIView 我的代码:Swift 子类化UIview问题,swift,uiview,Swift,Uiview,我的视图控制器上有一个UIView。我想在屏幕上以编程方式绘制一些标签。所以我想我可以将其子类化,并在该类中将其子类化为UIView 我的代码: import Foundation import UIKit class MainBottomView : UIView{ required init?(coder aDecoder: NSCoder) { super.init(frame: UIScreen.main.bounds); generateL
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)
}
}
但它在要求的初始化时崩溃了?一行我不知道为什么会这样。还是我使用子类的方式不对
多谢各位 如果您的UIView来自故事板/nib,则初始化器是
init?(编码器:)
。这就是你的代码需要去的地方
实际上,您的
init
可能永远不会运行。UIView的两个指定初始值设定项是init(frame:)
(对于在代码中创建的UIView)和init(coder:)
(对于从情节提要创建的视图)。这些是您需要覆盖的内容。您可以使用下面的代码来获得想法(Xcode 8.1(8B62))删除Info.plist中的故事板、启动屏幕、清理属性主故事板和启动屏幕,并用以下内容替换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)
}
}
我已经在我的视图控制器上创建了一个视图,我将该视图命名为MainBottomView类。所以我需要用init(coder:)替换init()?我想这就是我说的,不是吗?只需取出
fatalError
并将您对generateLabel
的调用放入即可(当然也可以调用super
)。我已经实现了一些不同的功能,我认为这样更好(见我的帖子)。但它还没有起作用。