Подтвердить что ты не робот

Как переопределить initWithFrame: и initWithCoder: в подклассе UIView?

Я пытаюсь подклассифицировать UIView. У меня уже есть назначенный инициализатор, и я хочу иметь возможность для инициализации моего пользовательского представления либо из кода, либо из файла Nib. Итак, Apple сообщила нам использовать назначенный инициализатор, но они не делают этого сами - initWithCoder: не вызывает initWithFrame:. Что я должен сделать, чтобы назначить назначенный инициализатор в обеих ситуациях? Нет ли способа сделать это?

4b9b3361

Ответ 1

Перенесите свою специальную инициализацию одним способом. Он может быть закрытым (объявлен в .m). Затем переопределите оба инициализатора и вызовите ваш init-метод из них.

- (void)myInitialization
{
    //do your stuff
}

-  (id)initWithFrame:(CGRect)aRect
{
    self = [super initWithFrame:aRect];

    if (self)
    {
        [self myInitialization];
    }

    return self;
}

- (id)initWithCoder:(NSCoder*)aDecoder 
{
    self = [super initWithCoder:aDecoder];
    if (self)
    {
        [self myInitialization];
    }

    return self;
}

Ответ 2

Как вы сказали:

initWithFrame: - Рекомендуется использовать этот метод. Вы также могут реализовывать пользовательские методы инициализации в дополнение к а не этот метод.

initWithCoder: - Внедрите этот метод, если вы загружаете свое представление из Интерфейсный файл с интерфейсом Builder и ваше представление требуют инициализации.

Что бы я делал, это просто метод, который оба вызывали бы, у которого было бы обычное поведение, которое вы хотите реализовать в своем UIView.