Вы говорите, что не хотите использовать XIB и хотите сделать все это программно.
Вам нужно реализовать метод initWithFrame:
:
- (id)initWithFrame:(CGRect)frame
{
if ((self = [super initWithFrame:frame])) {
// create/initialize your subviews here
self.myLabel = [[UILabel alloc] init...];
// configure the label
self.myLabel.font = ...;
self.myLabel.autoresizingMask = ...;
[self addSubview:self.myLabel];
}
return self;
}
Таким образом, вы создаете и настраиваете свои элементы управления (шрифты, цвета, маски автоматического изменения размера и т. д.) и добавляете их в качестве подпредставлений, используя метод initWithFrame:
. Вы, вероятно, захотите разбить код на разные методы, чтобы сохранить чистоту.
Если вы используете autolayout, вы также хотите создать все свои ограничения из метода init.
Если вы не используете автомакет, вам следует реализовать метод -layoutSubviews
. Это будет вызываться в соответствующее время для компоновки ваших подпредставлений (например, при изменении рамки вашего представления):
- (void)layoutSubviews
{
self.myLabel.frame = ...;
}
Из метода layoutSubviews
вы можете получить доступ к self.bounds
, чтобы определить размер представления в то время. Это позволит вам узнать, какая ширина/высота вам нужна для правильного выравнивания или переноса элементов.
Когда дело доходит до создания экземпляра вашего представления, просто используйте [[MyCustomView alloc] init]
(который вызовет initWithFrame:
с пустым прямоугольником) или [[MyCustomView alloc] initWithFrame:...]
. Установите его рамку и добавьте в какой-нибудь вид. Метод layoutSubviews
будет вызываться во все подходящие моменты времени, и он будет размещен соответствующим образом.
person
Mike Weller
schedule
01.08.2013