Не уверены, что поняли ваш вопрос, вы получаете подпредставления в главном окне, выполнив:
[[mainWin contentView] subviews]
Теперь, если вы хотите COPY , эти подпредставления немного сложнее, потому что, как справедливо упомянул PeyloW, UIView
не отвечает на протокол NSMutableCopying
.
Таким образом, вы можете написать категорию UIView
и добавить метод с именем - (UIView*) forceCopy
, который будет рекурсивно создавать новые UIViews и рекурсивно обрабатывать его дочерние элементы:
@implementation UIView (YourCategory)
- (UIView*) forceCopy
{
if (self == nil)
return nil;
UIView* aNewView = [[[self class] alloc] initWithFrame:self.frame];
[aNewView setBackgroundColor:[self backgroundColor]];
[aNewView setCenter:[self center]];
[aNewView setContentMode:[self contentMode]];
[aNewView setHidden:[self isHidden]];
[aNewView setAlpha:[self alpha]];
[aNewView setOpaque:[self isOpaque]];
[aNewView setTag:[self tag]];
for (UIView* aChildenView in [self subviews])
{
UIView* aPotentialNewView = [aChildenView forceCopy];
if (aPotentialNewView)
[aNewView addSubview:aPotentialNewView];
}
return aNewView;
}
@end
НО будьте осторожны, вам нужно будет создать столько категорий, сколько есть разных типов представлений в главном окне (UIButton, UILabel ...) и соответственно добавить их свойства, например, на UILabel
@implementation UILabel (YourCategory)
- (UIView*) forceCopy
{
UILabel* aNewLabel = (UILabel*)[super forceCopy];
if (aNewLabel)
{
[aNewLabel setFont:[self font]];
[aNewLabel setText:[self text]];
[aNewLabel setTextAlignment:[self textAlignment]];
[aNewLabel setTextColor:[self textColor]];
[aNewLabel setLineBreakMode:[self lineBreakMode]];
[aNewLabel setMinimumFontSize:[self minimumFontSize]];
[aNewLabel setAdjustsFontSizeToFitWidth:[self adjustsFontSizeToFitWidth]];
}
return aNewLabel;
}
@end