Как правильно использовать стиль UILabel? - PullRequest
2 голосов
/ 01 июля 2011

У меня есть несколько UILabel с одинаковой визуальной обработкой. Вместо того, чтобы каждый раз переопределять каждое свойство, я думаю просто сделать копии экземпляра и изменить текст. Это как это сделать?

Другой способ - создать фабричный метод, но я не очень люблю эту идею.

Ответы [ 2 ]

6 голосов
/ 01 июля 2011

Если вы хотите изучать Three20, вы можете использовать класс TTLabel, который включен в систему таблиц стилей Three20, которая в основном предназначена для решения вашей проблемы. Однако лично у меня возникли проблемы с анализом так называемой документации Three20, поэтому я думаю, что научиться использовать эту библиотеку просто для решения вашей проблемы - это очень непросто.

Мой способ решения этой проблемы - собрать метод мини-фабрики, например:

// Example:
- (UILabel *)makeLabel {
  UILabel *label = [[[UILabel alloc] init] autorelease];
  label.backgroundColor = [UIColor clearColor];
  label.font = [UIFont systemFontOfSize:kMyFontSize];
  label.textColor = [UIColor blueColor];
  label.textAlignment = UITextAlignmentCenter;
  [self.view addSubview:label];
  return label;
}

Тогда, когда я использую этот метод, другой код становится чище:

UILabel *nameLabel = [self makeLabel];
nameLabel.text = userName;
UILabel *titleLabel = [self makeLabel];
titleLable.text = myTitle;
// Both labels have consistent style.

PengOne предлагает создать подкласс UILabel. Это вариант, хотя я думаю, что этот фабричный метод справляется со своей задачей с меньшим количеством работы.

0 голосов
/ 01 июля 2011

Похоже, что вы хотите создать подкласс UILabel, чтобы он соответствовал вашим предпочтениям.Это довольно просто сделать.Создайте новый файл в Xcode (и Objective C Class) с именем CustomLabel (или как вам угодно).

CustomLabel.m:

#import <UIKit/UIKit.h>

@interface CustomLabel : UILabel {
}

@end

CustomLabel.h:

#import "CustomLabel.h"

@implementation CustomLabel

- (id)initWithFrame:(CGRect)frame {

    self = [super initWithFrame:frame];
    if (self) {
        // CUSTOMIZATION HERE
    }
    return self;
}

- (void)dealloc {
    [super dealloc];
} 

@end

Если это кажется излишним, то вы можете просто создать метод в вашем ViewController, чтобы выполнить настройку:

-(void)customizeLabel:(UILabel *)label {
    // CUSTOMIZATION HERE
}

, а затем вызвать его для любой создаваемой вами метки.

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