Добавяне на подизгледи в горната част на програмно създадена йерархия на UIView

Имам подклас UIView, който програмно създава и добавя редица подизгледи. Искам обаче да дам на потребителите на класа възможността да поставят нови подизгледи върху него (и неговите подизгледи) с помощта на addSubview и в идеалния случай също от Interface Builder.

Кой е най-добрият начин да направите това?

Сега, предполагам, че би било приемливо само да се добавят изгледите програмно с помощта на addSubview, но не съм сигурен как бих постъпил и за това.

ЗАБЕЛЕЖКА: Опитах да добавя допълнителни подизгледи с помощта на създателя на интерфейс, но те са скрити, след като персонализираният подклас UIView, за който споменах по-горе, създаде другите си изгледи програмно, вероятно тъй като те са добавени последно.


person Tom    schedule 09.02.2012    source източник


Отговори (1)


Просто плъзнете общ UIView в ниб в Interface Builder и задайте неговия клас на вашия потребителски подклас. Все още можете да правите всичко, което бихте могли с обикновен стар UIView, включително подизгледи с плъзгане.

Вие няма да можете да видите как всъщност изглежда персонализираният подизглед в Interface Builder; ще бъде просто сив правоъгълник. Бихте могли (мисля) да направите това в Xcode 3 с IB добавки, но поне за момента Xcode 4 не поддържа такива добавки.

РЕДАКТИРАНЕ:

За да се справите с последващите действия на OP, трябва да управлявате z-подреждането програмно. Вероятно най-лесното нещо, което можете да направите, е да оставите кода си такъв, какъвто е, но вместо да правите нещо като:

UIView *mySubview1 = ...;
UIView *mySubview2 = ...;
UIView *mysubview3 = ...;
[self addSubview:mySubview1];
[self addSubview:mySubview2];
[self addsubview:mySubview3];

(което, както отбелязахте, може да наслои подизгледите върху подизгледите на потребителя)

Направете нещо като:

UIView *container = [[UIView alloc] initWithFrame:[self bounds]];
UIView *mySubview1 = ...;
UIView *mySubview2 = ...;
UIView *mysubview3 = ...;
[container addSubview:mySubview1];
[container addSubview:mySubview2];
[container addsubview:mySubview3];
[self addSubview:container];
[self sendSubviewToBack:container];
[container release];

Можете алтернативно да използвате [self insertSubview:container atIndex:0], но мисля, че добавянето и преместването назад е малко по-ясно при бързо преглеждане на кода.

Крайният резултат е, че не е нужно да се забърквате със съществуващото z-подреждане на вашите подизгледи; като ги поставите в единичен, лесно управляван контейнер, можете да преместите цялата колекция където пожелаете в йерархията на подизгледите.

person Conrad Shultz    schedule 09.02.2012
comment
Това е, което опитах първоначално. За съжаление, тъй като персонализираният клас добавя другите си подизгледи програмно, те се появяват върху изгледите, които добавих в IB. - person Tom; 10.02.2012
comment
Мисля, че трябва да направиш [self.view addSubview:mySubview1]; - person Supertecnoboff; 13.11.2015