Пользовательский UIViewController и пользовательский UIView - PullRequest
0 голосов
/ 10 апреля 2011

У меня есть три вида, которые имеют несколько сходств. Например, UIImageView в позиции 30, 30 и три метки UILabels в одной позиции.

Какой лучший способ решить эту проблему без копирования и вставки или избыточного кода?

Когда я создаю все три вида пером, мне приходится копировать и вставлять одни и те же части ...

Я начал реализовывать свой собственный UIViewController и базовый UIView для этого. Мой код выглядит так:

- (id)init {

    if((self = [super init])) {

        image = [[UIImageView alloc] init];
        header = [[UILabel alloc] init];

        [self addSubview:image];
        [self addSubview:header];
    }

    return self;   
}

- (void)layoutSubviews {

    [super layoutSubviews];

    image.frame = CGRectMake(30, 30, 20, 20);

    header.frame = CGRectMake(30, 100, 200, 30);
}

Когда я помещаю контроллер с этим представлением в стек, представление отображается неправильно. Изображение и метка покрыты заголовком заголовка (навигационный контроллер) ...

Может кто-нибудь объяснить мне, как работает эта система макетов ... IOS SDK - худший SDK, с которым я когда-либо работал :(

Ответы [ 2 ]

0 голосов
/ 10 апреля 2011

Когда я создаю все три вида пером, мне приходится копировать и вставлять одни и те же части ...

Вы понимаете, что это возможно - просто, даже -у какого-либо объекта, подобного контроллеру представления, нагрузка более чем на одно перо?Все три ваших контроллера представления могут загружать общую часть интерфейса из одного и того же файла пера, а также загружать свои собственные интерфейсы из своих собственных файлов пера.Один из способов сделать это - поместить выходные данные для общего интерфейса в один класс вместе с любым кодом (настройкой, действиями и т. Д.), Необходимым для управления общим интерфейсом.Затем вы можете создать подкласс этого класса для каждого отдельного контроллера представления, и каждый подкласс будет загружать свой собственный кончик.Последний шаг - вставить интерфейс из подкласса в иерархию представлений суперкласса или вставить интерфейс из суперкласса в иерархию представлений подкласса, в зависимости от того, что имеет смысл в вашей ситуации.

0 голосов
/ 10 апреля 2011

Не вижу необходимости копировать и вставлять при создании представлений в кончике? Это определенно устраняет необходимость позиционирования представлений по коду. И в дополнение к комментарию: обычно «худшие» sdks - это те, которые мы плохо знаем.

И если им нужен общий набор служебных кодов, создайте метод, который будет принимать представление в качестве параметра и делать это, не нарушая принципа СУХОЙ (не повторяйте себя)

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