Один из способов - заставить вашу оболочку просматривать пользовательский подкласс UIView. В этом подклассе ведите отдельный NSMutableArray ваших подпредставлений, в котором индекс массива каждого подпредставления соответствует его позиции на экране.
С этим у вас есть несколько вариантов. Один из них - переопределить didAddSubview :. На основе кадра добавляемого подпредставления вы можете определить позицию подпредставления и вставить ссылку на подпредставление по соответствующему индексу в вашем массиве.
Более чистый вариант - реализовать свой собственный метод, подобный этому:
- (void)insertSubview:(UIView *)subview atPosition:(NSInteger)position;
, где position
- это индекс, определяющий, какой «слот» должен заполнять подпредставление. Вы можете установить рамку для подпредставления явно в этом методе вместе с любыми другими подпредставлениями, на которые влияет вставка. Затем вставьте подпредставление в ваш массив с соответствующим индексом.
Наконец, переопределите willRemoveSubview :. В нем вы можете использовать indexOfObject:
в вашем массиве, чтобы найти позицию удаляемого подпредставления. Затем просто настройте кадры всех подпредставлений, которые следуют за ним, и удалите подпредставление из вашего массива.
(Еще одна альтернатива - пропустить массив и просто использовать свойство tag
, чтобы указать позицию каждого подпредставления. Мне не нравится этот параметр. Использование свойства tag
для чего-либо всегда кажется ужасным взломать меня.)