2

UIButton クラスを拡張して、UINavigationBarButton のフォントと色を設定できるようにします (このコード例から: コードをオンに切り替えます) 。

私はこのように行きます:

@interface NavBarButtonGrey : UIButton 
-(id)init;

@end


@implementation NavBarButtonGrey

-(id)init {
if(self = [super init]) {
    self.frame = CGRectMake(0, 0, 49.0, 30.0);
    self.contentVerticalAlignment = UIControlContentVerticalAlignmentCenter;
    self.contentHorizontalAlignment = UIControlContentHorizontalAlignmentCenter;

    UIImage *image = [UIImage imageNamed:@"greyNavButton.png"];
    UIImage *stretchImage = 
    [image stretchableImageWithLeftCapWidth:15.0 topCapHeight:0.0];
    [self setBackgroundImage:stretchImage forState:UIControlStateNormal];
    self.backgroundColor = [UIColor clearColor];
    [self setTitleShadowColor:[UIColor blackColor] forState:UIControlStateNormal];
    self.titleShadowOffset = CGSizeMake(0, -1);
    self.titleLabel.font = [UIFont boldSystemFontOfSize:13];
}

return self;
}
@end

これは問題ありませんが、もちろんあまり柔軟ではありません。カスタムボタンを準拠させたいすべての異なる色、フォント、およびサイズに対して、(Apple のように) typedef 列挙型を使用して組み込む方法を教えてください。

UIKit からインターフェイス ファイルを取得できる唯一のことは、次のように行われることです。

typedef enum {
RGCustomNavBarButtonStyleBlue,
RGCustomNavBarButtonStyleGrey,
RGCustomNavBarButtonStyleBlack,
RGCustomNavBarButtonStyleGreen,
RGCustomNavBarButtonStyleRed, 
} RGCustomNavBarButtonStyle;

そこから、コンストラクター(initWithStyle)を介して列挙型の値からフォント、サイズ、色などを取得する実用的な実装に入るにはどうすればよいですか?

Objective Cでコンストラクターをオーバーロードしますか? 複数のコンストラクタ?

それが理にかなっていることを願っています。与えられた助けに感謝します:)

4

2 に答える 2

2

ennuikillerが上で言ったことを拡張するために、私は1つの初期化子(通常はinitWithFont:andColor:のような最もオプションのあるもの)を選び、他の初期化子にそれを呼び出させるように教えられました(Hillegassの本)。そのメインの初期化子は、指定された初期化子と呼ばれます。

したがって、コードには[super init]を呼び出す完全に実装されたinitWithFont:andColor:があり、次に次のようなinitWithFont:もあります。

-(MyClass) initWithFont: (UIFont) font
{
    [self initWithFont:font andColor:RGCustomNavBarButtonStyleBlack];
}

次に、initWithFont:andColor:が他のすべてのセットアップを処理し、[superinit]を呼び出します。

于 2010-02-03T15:11:52.007 に答える
1

次のような複数のコンストラクターを使用できます。

-(MyClass) initWithFont: (UIFont) font;
-(MyClass) initWithFonmt: (UIFont) font andColor: (UIColor) color;

次に、各カスタム コンストラクターの最初の行として [super init] を呼び出します。

于 2009-10-29T11:31:24.603 に答える