Как создать «контейнерное» представление ряда UILabels? - PullRequest
0 голосов
/ 23 марта 2011

Могу ли я попросить некоторые высокоуровневые рекомендации относительно того, как создать представление типа «контейнер» для строки из 3 UILabels, которые будут использоваться в пользовательском подклассе UITableViewCell? Как бы вы это сделали, какие классы вы бы подкласс для этого, например? Сколько методов мне нужно переопределить для этого? (например, layoutSubviews, прочее?)

Предпосылка:

  • У меня уже есть пользовательский подкласс UITableViewCell, в котором я отображаю несколько строк UILabels, в каждой строке по 3 UILabels.
  • чтобы код выглядел чище, было бы неплохо рассматривать "строку из 3 x UILabels" как один вид, так сказать
  • как бы я это сделал - я бы просто подкласс "UIView", возможно, для этого? тогда я переопределил бы здесь "layoutSubviews", чтобы выложил новый "ряд из 3 x UILabels".

Ответы [ 2 ]

1 голос
/ 23 марта 2011

Какой подход использовать:

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

1.Код будет выглядеть чище (особенно в классе пользовательских ячеек). Как указано вашим.

2. Кроме того, если вам требуется более 3 UILabels или какое-либо унаследованное представление UIView, никаких изменений в вашем пользовательском классе ячеек не требуется,

Как бы я это сделал

Создайте унаследованный класс UIView, добавьте все свои UILabels в качестве подпредставлений, затем предоставьте реализацию для -(void) layoutSubviews, установите фрейм для каждого UILabel.

Добавьте UIView с подклассами в качестве подпредставления в пользовательской ячейке и установите для него рамку методом -(void) layoutSubviews,

0 голосов
/ 23 марта 2011

Вы бы либо создали подкласс UIView, либо поместили бы все в контроллер представления. Я бы выбрал 2-й вариант, так как вам не нужно, чтобы ваш пользовательский вид делал сложные вещи, для этого подкласс выглядит немного «слишком много».

Создайте несколько переменных экземпляра в контроллере вида (в .h):

UILabel     *label1, *label2, *label3;

Затем в своем имплементации (в .m) сделайте следующее: Метод 'viewDidLoad':

// First label... Create and configure.
label1  = [[UILabel alloc] init];
// [Configure here]
[[self view] label1];
// Second label... Create and configure.
label2  = [[UILabel alloc] init];
// [Configure here]
[[self view] label2];
// Third label... Create and configure.
label3  = [[UILabel alloc] init];
// [Configure here]
[[self view] label3];

Затем в методе 'viewDidLoad':

// Release / Nillify everything.
[label1 release], label1 = nil;
[label2 release], label2 = nil;
[label3 release], label3 = nil;

В вашем viewDidAppear и любом другом методе, сигнализирующем об изменении ориентации, вам необходимо настроить макет ... Используйте прямоугольный родительский вид для получения границ / фрейма и измените геометрию 3 меток в соответствии с вашим необходимым макетом .

Если вы предпочитаете делать это с помощью подкласса UIView, вы можете сделать то же самое, но вместо того, чтобы делать макет в viewDidLoad, вам придется делать это в 'layoutSubviews', как вы и планировали. Кроме того, код инициализации / выделения может переходить в initWithCoder: если ваше представление из XIB и освобождение в вашем dealloc.

Надеюсь, это поможет, Пьер.

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