2011-07-01 5 views
2

私はいくつかの同じ視覚的な治療を持つUILabelを持っています。毎回すべてのプロパティを再定義する代わりに、インスタンスのコピーを作成してテキストを変更することを考えています。これはどうすればいいのでしょうか?UILabelのスタイルを再利用する正しい方法は何ですか?

もう一つの方法は、ファクトリメソッドを作成することですが、私はその考えが好きではありません。

+0

メソッド/関数/ MACRO:あなたが選んだのは、私がInterfaceBuilderでそれらを作成しているときに、私は間違いなくそれらを複製しますが、コードではやりたくないのです(しかし、 "プロトタイプ"ファンではありません)。コード内にUILabelsを作成しないでください。 – bshirley

+0

addendum:私は 'UITableViewCell'のサブクラスを持っています。これは、編集モードに/から変更するときに、半分ダースのところに含まれる' UITextField'を変更します。コピーはそれをカットしません。 – bshirley

答えて

6

Three20を学ぼうと思えば、クラスを使うことができます。このクラスは、あなたの問題を解決するために設計された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

PSこのようなコードを使用する場合は、ラベルのフレームをどこかに設定することを忘れないでください。 – Tyler

+0

ありがとう@タイラー。私はThree20について興味があります。いくつかの人々はそれが過度だと言いますが、サイトには、どのモジュールを含めるかを選ぶことができると言われています。 – pixelfreak

0

UILabelをサブクラス化して、デフォルト設定にしたいようです。それはかなり簡単です。 CustomLabel(または好きなもの)と呼ばれるXcode(およびObjective C Class)で新しいファイルを作成します。

CustomLabel.m:

#import <UIKit/UIKit.h> 

@interface CustomLabel : UILabel { 
} 

@end 

CustomLabel.h:

:これはやり過ぎのように思える場合は、あなただけのカスタマイズを行うには、あなたのViewControllerでメソッドを作成することができます

#import "CustomLabel.h" 

@implementation CustomLabel 

- (id)initWithFrame:(CGRect)frame { 

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

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

@end 

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

あなたが作成したラベルでこれを呼び出します。

+0

スタイリングはサブクラスを保証する。それは本当に単なる色/背景/フォント/影です。 – pixelfreak

+0

@pixelfreak:それを数回以上使用したいし、後で一般的な変更を適用できるようにしたい場合は、これが最良の方法です。それ以外の場合は、毎回同じコードをコピーして貼り付ける必要がありますが、これでオーバーヘッドは大きくなりません。 – PengOne

関連する問題