我已经以编程方式创建了一个标签 -
var label = UILabel(frame: CGRect(x: 31, y: 169, width: 258, height: 258))
label.textAlignment = NSTextAlignment.Center
label.text = ""
label.backgroundColor = UIColor.blackColor()
self.view.addSubview(label)
我还创建了一个Cocoa Touch类文件,它是UILabel的子类。此文件将覆盖drawRect方法。我想让这个文件成为我创建的Label的类。我怎样才能做到这一点?
答案 0 :(得分:0)
你可以这样做:
var classLbl = YourClass() //instead of using UILabel use your class.
classLbl.frame = CGRectMake(31, 169, 258, 258)
classLbl.textAlignment = NSTextAlignment.Center
classLbl.text = ""
//and so on
答案 1 :(得分:0)
当你继承某些东西时,这意味着你正在“扩展”你的“父母”的功能 - 在你的情况下UILabel
- 并且创造一个“孩子”。有更多方法可以扩展某些类的功能,但这是最基本的方法。
当您创建子类时,您基本上是在说“将这些函数附加到父级”,如果它们相同,则覆盖它们(这就是您需要override
个关键字的原因。)
在您的情况下,您创建了UILabel
的子类,可能是这样的:
class MyLabel : UILabel {
override func drawRect(rect: CGRect) {
// Your drawing code
}
}
如果你想使用它,你只需要用不同的类分配你的变量;您MyLabel
:
var label = MyLabel(frame: CGRectZero)
MyLabel
类自动继承UILabel
中的所有构造函数,变量和方法,因此您可以像以前一样使用以前的所有功能。
注意:虽然它是不同的数据类型,但如果您有方法:
func useMyLabel(label : UILabel) {
// Do something with my label
}
您仍然可以使用您的对象填充“label”参数,因为它是UILabel的子代。在这种情况下,您创建“额外”的方法将无法被您访问,除非您强制将变量类型转换为您的类型,如下所示:
let myLabel = label as! MyLabel
如果您想了解有关继承的更多信息,Apple Documentation提供了有关如何在swift中工作的所有内容,或者wikipedia article提供了相当广泛的内容,并且不仅提供了有关类继承的更多信息。