iPhone - Загрузка UIView с пользовательским интерфейсом из пера? - PullRequest
1 голос
/ 17 июля 2011

У меня есть UIView, и я инициализирую его из файла пера.

В моем nib-файле я перетащил UIImageView и изменил имя класса на MyImage.

Когда я загружаю представление, не похоже, что оно инициализирует изображение, используя мой пользовательский класс, потому что метод init не вызывается. Есть идеи, в чем проблема?

@interface MyView : UIView
@property (nonatomic, retain) IBOutlet MyImage *image;
@end

@implementation MyView
@synthesize image;

- (id)init
{
   self = [super initWithNibName:@"MyView" bundle:nibBundleOrNil];
   return self;
}
@end

Вот MyImage Вот мое изображение

@interface MyImage : UIImageView
@end

@implementation MyImage
- (id)init
{
   // This doesn't get called 
   self = [super init];
   if (self) 
   {
      // do somethin
   }
   return self;
}
@end

Ответы [ 3 ]

4 голосов
/ 17 июля 2011

Инициализатор, который используется при загрузке представления с кончика, -initWithCoder:, а не -init.Со справочной страницы UIView :

initWithCoder: - Реализуйте этот метод, если вы загружаете представление из файла пера Interface Builder и ваше представление требует пользовательской инициализации.*

Более того, если вы создаете экземпляр представления программно, обычный инициализатор - -initWithFrame:.

Итак, измените ваш метод -init на -initWithCoder: или реализуйте -initWithCoder: так, чтобы онзвонит вашему -init.

1 голос
/ 17 июля 2011

Калеб прав, реализуй это так:

-(id)initWithCoder:(NSCoder *)aDecoder {
    self = [super initWithCoder:aDecoder];
    if(self) {
        self.userInteractionEnabled = YES;
        // other stuff
    }
    return self;
}
0 голосов
/ 11 мая 2012

Я, хотя awakeFromNib был безопаснее, поскольку все розетки подключены правильно

-(id)initWithCoder:(NSCoder *)aDecoder {
    self = [super initWithCoder:aDecoder];
    if(self) {
        //self.userInteractionEnabled = YES;
        // other stuff
    }
    return self;
}

- (void)awakeFromNib
{
    ..setup view
}

Вызывается по порядку:

initWithCoder
awakeFromNib
...