Пользовательский вид с пером, так как подпредставление не загружается - PullRequest
3 голосов
/ 05 мая 2010

Я создал собственное представление, которое загружает его содержимое из пера, например:

/* PricingDataView.h */

#import <UIKit/UIKIt.h>

@interface PricingDataView : UIView {
  UIView *contentView;
}
@property (nonatomic, retain) IBOutlet UIView *contentView;
@end

/* PricingDataView.m */

#import "PricingDataView.h"

@implementation PricingDataView
@synthesize contentView;

- (id)initWithFrame:(CGRect)frame {
  if ((self = [super initWithFrame:frame])) {
    [[NSBundle mainBundle] loadNibNamed:@"PricingDataView" owner:self options:nil];
    [contentView setFrame:frame];
    [self addSubview:contentView];
  }
  return self;
}

/* ... */

В файле пера я установил PricingDataView в качестве типа владельца файла , и подключил выход contentView в IB. Я поместил обычный UIView из библиотеки интерфейсов в полноразмерное представление, отображаемое пользователю, а затем изменил имя его класса на PricingDataView. Все это собирается, но во время выполнения ничего не отображается там, где должен быть мой пользовательский вид.

Я поставил точки останова в PricingDataView.initWithFrame, но они не попадают, поэтому я знаю, что мне не хватает чего-то, что могло бы вызвать инициализацию представления. Что меня интересует, так это то, что в процессе загрузки других моих представлений из перьев вся инициализация происходит для меня, но не с этим. Зачем?

Ответы [ 3 ]

10 голосов
/ 05 мая 2010

Вы уверены, что другие ваши виды не используют UIViewController? Вот цитата из документации для initWithFrame: из UIView:

Если вы используете Interface Builder для проектирования ваш интерфейс, этот метод не вызывается, когда ваши объекты просмотра впоследствии загружен из файла пера. Объекты в файле пера воссоздан и затем инициализирован используя их initWithCoder: метод, который изменяет атрибуты посмотреть, чтобы соответствовать атрибутам, хранящимся в файл пера. Для подробной информации о том, как представления загружаются из пера файл, см. Руководство по программированию ресурсов .

1 голос
/ 05 апреля 2012

просто отмените имя класса (PricingDataView) представления, которое вы добавляете к UIView. В этом случае будет вызван метод initWithFrame:.

ранее awakeFromNib вызывалось в цикле. Поскольку ваши customView и View, которые вы добавляете через Nib как subView, относятся к одному и тому же типу класса.

1 голос
/ 04 января 2011

при добавлении файлов в Интерфейсный Разработчик во время выполнения он вызывает -(id)initWithCoder:(NSCoder *)aDecoder, а не initWithFrame.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...