如何指定嵌套的自定义视图class?
How to specify nested custom view class?
可用
嵌套 classes SuperView 和 NestedView。
class SuperView : UIImageView {
class NestedView : UIImageView {
var text : String = "Nested View"
}
var text : String = "Super View"
var nested : NestedView?
}
我想在故事板场景的检查器中为一个名为 "Custom Class Name" 的 属性 的 UIImageView 设置值 "NestedView"。但是 Interface Builder 找不到 "NestedView" class.
在Swift中,内部class的实例独立于外部class的任何实例。就好像 Swift 中的所有内部 classes 都是使用 Java 的静态声明的。
我认为这个 class 设计不符合您的要求。你需要做的是,你需要创建一个新的 class outside 你的视图,并创建某种组合。这一定对你有用。
这里是对您的代码的一些修改:
class SuperView : UIImageView {
var text : String = "Super View"
var nested : NestedView = NestedView()
}
class NestedView : UIImageView {
var text : String = "Nested View"
}
此时,我认为 Interface Builder 只能识别 Objective-C classes 的名称。您仍然可以使用 @objc 关键字让 Interface Builder 找到嵌套的 class:
class SuperView: UIView {
@objc(SVNestedView) class NestedView: UIImageView {
}
}
然后,在 Interface Builder 中,指定视图属于 class SVNestedView。由于 Objective-C 未命名空间,您仍然需要为每个嵌套的 class 选择唯一的名称,但至少 Swift 端已正确命名空间。
我认为到目前为止不可能在像 SuperView.NestedView
这样的故事板中指定一个内部 class。所以我从内部 class 扩展了一个 class,然后在像 SuperView_NestedView
这样的故事板中指定它。这个对我有用。
final class SuperView_NestedView: SuperView.NestedView {} // Specifies this class in the storyboard
class SuperView : UIImageView {
class NestedView : UIImageView {
var text : String = "Nested View"
}
var text : String = "Super View"
var nested : NestedView?
}
此视图可以从 ViewController 引用为 SuperView.NestedView
,因为 SuperView_NestedView
是从 SuperView.NestedView
扩展而来的。
class TheViewController: UIViewController {
@IBOutlet var nestedView: SuperView.NestedView!
可用 嵌套 classes SuperView 和 NestedView。
class SuperView : UIImageView {
class NestedView : UIImageView {
var text : String = "Nested View"
}
var text : String = "Super View"
var nested : NestedView?
}
我想在故事板场景的检查器中为一个名为 "Custom Class Name" 的 属性 的 UIImageView 设置值 "NestedView"。但是 Interface Builder 找不到 "NestedView" class.
在Swift中,内部class的实例独立于外部class的任何实例。就好像 Swift 中的所有内部 classes 都是使用 Java 的静态声明的。
我认为这个 class 设计不符合您的要求。你需要做的是,你需要创建一个新的 class outside 你的视图,并创建某种组合。这一定对你有用。
这里是对您的代码的一些修改:
class SuperView : UIImageView {
var text : String = "Super View"
var nested : NestedView = NestedView()
}
class NestedView : UIImageView {
var text : String = "Nested View"
}
此时,我认为 Interface Builder 只能识别 Objective-C classes 的名称。您仍然可以使用 @objc 关键字让 Interface Builder 找到嵌套的 class:
class SuperView: UIView {
@objc(SVNestedView) class NestedView: UIImageView {
}
}
然后,在 Interface Builder 中,指定视图属于 class SVNestedView。由于 Objective-C 未命名空间,您仍然需要为每个嵌套的 class 选择唯一的名称,但至少 Swift 端已正确命名空间。
我认为到目前为止不可能在像 SuperView.NestedView
这样的故事板中指定一个内部 class。所以我从内部 class 扩展了一个 class,然后在像 SuperView_NestedView
这样的故事板中指定它。这个对我有用。
final class SuperView_NestedView: SuperView.NestedView {} // Specifies this class in the storyboard
class SuperView : UIImageView {
class NestedView : UIImageView {
var text : String = "Nested View"
}
var text : String = "Super View"
var nested : NestedView?
}
此视图可以从 ViewController 引用为 SuperView.NestedView
,因为 SuperView_NestedView
是从 SuperView.NestedView
扩展而来的。
class TheViewController: UIViewController {
@IBOutlet var nestedView: SuperView.NestedView!