Как указать вложенный пользовательский класс представления?
Доступные
вложенные классы SuperView и NestedView.
class SuperView : UIImageView {
class NestedView : UIImageView {
var text : String = "Nested View"
}
var text : String = "Super View"
var nested : NestedView?
}
Я хотел бы установить для UIImageView свойство с именем "Custom Class Name" для значения "NestedView" внутри инспектора сцены раскадровки. Но Interface Builder не смог найти класс "NestedView".
![enter image description here]()
Ответы
Ответ 1
В это время я думаю, что Interface Builder распознает имена классов Objective-C. Вы все равно можете заставить Interface Builder найти вложенный класс с ключевым словом @objc:
class SuperView: UIView {
@objc(SVNestedView) class NestedView: UIImageView {
}
}
Затем в Interface Builder укажите, что th-представление имеет класс SVNestedView. Поскольку Objective-C не помещается в пространство имен, вам все равно нужно выбирать уникальные имена для каждого вложенного класса, но по крайней мере сторона Swift должным образом помещается в имена.
Ответ 2
В Swift экземпляр внутреннего класса не зависит от любого экземпляра внешнего класса. Это похоже на то, что все внутренние классы в Swift объявляются с использованием Java static.
Я не думаю, что этот классный дизайн соответствует вашим требованиям. Что вам нужно сделать, вам нужно создать новый класс вне вашего представления и создать какую-то композицию. Это наверняка поможет вам.
Вот некоторые изменения вашего кода:
class SuperView : UIImageView {
var text : String = "Super View"
var nested : NestedView = NestedView()
}
class NestedView : UIImageView {
var text : String = "Nested View"
}
Ответ 3
Я думаю, что пока невозможно определить внутренний класс в раскадровке, подобной SuperView.NestedView
. Поэтому я делаю класс расширенным из внутреннего класса, а затем указываю его в раскадровке, например, 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?
}
Это представление можно назвать SuperView.NestedView
из ViewController, поскольку SuperView_NestedView
расширено от SuperView.NestedView
.
class TheViewController: UIViewController {
@IBOutlet var nestedView: SuperView.NestedView!