Я, вероятно, не делаю это правильно. Я не делал приложение для iPad, пока не сделал то, что мне кажется естественным.
У меня есть UIView, который будет составлен из других UIViews. В частности, я хочу динамически создавать и добавлять подпредставления для каждого из этих подпредставлений. Другими словами:
UIView
|
| --> UIView
|
| --> Dynamic UIView 1
| --> Dynamic UIView 2
| --> ...
Мне удалось получить 'Dynamic UIView 1', добавив в его initWithFrame этот бит кода для загрузки xib:
NSArray *nibViews = [[NSBundle mainBundle] loadNibNamed:@"ItemView"
owner:[[ItemViewController alloc] init]
options:nil];
ItemView *infoView = [nibViews objectAtIndex:0];
[self addSubview:infoView];
Это работает! У меня проблема в том, что 'Dynamic UIView n' всегда отображается в верхнем левом углу экрана. Если я пытаюсь изменить положение с помощью setFrame, я получаю черный квадрат при представлении кадра, однако фактическое содержимое элемента управления остается в верхнем левом углу.
Есть идеи? Есть ли лучший способ сделать это?
----- Обновление -----
Вот скриншот корневого представления.
Обзор основного UIView http://www.freeimagehosting.net/uploads/460090996d.png
Весь элемент управления является вызовом CurrentItemsViewController. Зеленая область - это UIView внутри, который я связал обратно в коде через ссылку в IB, в примере кода он называется "itemsUIView". Вот как я добавляю элементы в CurrentItemsViewController.m
- (id)init {
[super initWithNibName:nil
bundle:nil];
UITabBarItem *tbi = [self tabBarItem];
[tbi setTitle:@"Current"];
/* Approach 1 */
NSArray *nibViews = [[NSBundle mainBundle] loadNibNamed:@"ItemView"
owner:[[ItemViewController alloc] init]
options:nil];
ItemView *subItemView1 = [nibViews objectAtIndex:0];
/* Approach 2 - this apprach does Approach 1 in the initWithFrame method */
//ItemView *subItemView1 = [[ItemView alloc] initWithFrame:CGRectMake(120, 120, 354, 229)];
/* Approach 3 */
//ItemViewController *ctr = [[ItemViewController alloc] init];
//UIView *subItemView1 = [ctr view];
[[self view] addSubview:subItemView1];
// [[self itemsUIView] addSubview:subItemView1]; <-- doesn't render subItemView1 at all
[subItemView1 release];
[subItemView1 setFrame:CGRectMake(120, 120, 354, 229)];
[subItemView1 setBounds:CGRectMake(120, 120, 354, 229)];
return self;
}
Внутри ItemView.m у меня это, он получает вызов только при подходах 2 и 3.
- (id)initWithFrame:(CGRect)frame {
if ((self = [super initWithFrame:frame])) {
NSArray *nibViews = [[NSBundle mainBundle] loadNibNamed:@"ItemView"
owner:[[ItemViewController alloc] init]
options:nil];
ItemView *infoView = [nibViews objectAtIndex:0];
[self addSubview:infoView];
}
return self;
}
Как показано, я попытался создать ItemView 3 различными способами, и каждый из них дает один и тот же результат. Когда я добавляю представление как подпредставление корневого представления, я получаю это. Обратите внимание, что квадрат отображается там, где он должен отображаться, однако ViewItem фактически отображает в верхнем левом углу. В приведенном выше примере, когда я добавляю subItemView1, он вообще ничего не рендерит.
альтернативный текст http://www.freeimagehosting.net/uploads/c6635ce860.png