Как мне использовать полиморфизм, чтобы метод мог принимать несколько классов, но с помощью IBOutlets?
Вопрос
У меня есть конкретный метод, который принимает UIView
объект, и я хочу передать ему объекты, которые могут относиться к одному из двух классов.Скажем, он принимает UIView
который представляет животное, я хочу иметь возможность передать DogView
и CatView
или потенциально другие классы животных.
В рамках этого метода я хочу установить nameLabel
взгляд, который есть у всех животных.Как мне настроить его, чтобы я мог это сделать?
Моей первой реакцией было желание иметь суперкласс (например, AnimalView
), который имеет nameLabel
переменную, а затем подклассифицировать ее для каждого нового животного.Однако, если я хочу, чтобы nameLabel
чтобы быть выходом, он не кажется настраиваемым, поскольку я не мог иметь переменную в каждом подклассе, к которой можно было бы подключить представление в IB.
Затем я попробовал Protocol
, но это не полиморфизм, и я не смогу получить доступ к свойству nameLabel через общий суперкласс, не так ли?В отличие от Objective-C я не мог попросить UIView <ProtocolName>
и тогда это позволило бы мне попросить об этом.
Как мне следует это делать?Я просто хочу иметь возможность передавать различные типы объектов и обеспечивать их совместимость с Interface Builder.Должен ли я подойти к этому совершенно по-другому?
Решение
Вы можете подключить розетку label
к разным viewControllers
с вашей SuperClass
из раскадровки если у тебя другое viewControlelrs
в раскадровке Subclasses
(полученные от SuperClass) имена в раскадровке.
1) Просто определите
class SuperClass{
@IBOutlet weak var label: UILabel! = nil
}
SubClass1
представитель view controller1
в раскадровке, полученной из SuperClass
SubClass2
представлять другого view controller2
в раскадровке, полученной из SuperClass
2) Затем перейдите Assistant Editor
и открыть SuperClass
одна сторона и другая сторона view controller1
и подключите розетку от SuperClass
к label
в StoryBoard в view controller1
.Перетащите из SuperClass
label
в StoryBoard в view controller1
3)Теперь снова открываем SuperClass
одна сторона и другая сторона view controller2
и подключите розетку от SuperClass
к label
в StoryBoard в view controller2
.Перетащите из SuperClass
label
в StoryBoard в view controller2
Если вы нажмете на SuperClass
выход, чем вы увидите две метки, связанные с разными контроллерами представления.
Другие советы
Объявить IBOutlet
в superclass
, AnimalView
.Затем в Interface Builder, как только вы установите пользовательский UIView's
класс в инспекторе удостоверений будет DogView
, перейдите в Инспектор подключений и nameLabel
Будет здесь.
@interface Parent : UIView
@property (nonatomic,weak) IBOutlet UILabel *nameLabel;
@end
@interface Child : Parent
@end