0

から継承するクラスを作成しましたUIButton。XIBにrounded-rectボタンを追加し、それらのクラスプロパティをに設定するとUIButton、それらはrounded-rectボタンとして表示されます(ただし、カスタムコードは呼び出されないため、ボタンは通常のボタンのように動作しますが、これは私が望むものではありません)。IBでこれらのボタンのクラスプロパティをカスタムクラスUIButtonCustomに設定した場合でも、IBデザイナーでは丸みを帯びた長方形のボタンのように見えますが、アプリを実行すると、ボタンはカスタムタイプになります(つまり、ボタンではほとんど空白で表示されます)ボタンの背景画像を設定していないため、テキスト)。

アプリが実際に実行されたときに、これらのボタンを丸みを帯びたrectボタンのように見せるための方法はありますか?

4

2 に答える 2

1

UIButtonxibに表示される丸いボタンは、 ieのサブクラスですUIRoundedRectButton
また、文書化されていないため(プライベートAPI)、サブクラス化することはできないと思います。

于 2013-02-08T16:38:17.813 に答える
1

ここで他の人が指摘しているように、UIRoundedRectButtonをサブクラス化することはできません。ただし、initメソッドでいくつかのCALayerプロパティを設定することにより、ボタンを丸みを帯びたrectボタンのように見せることができます。

#import "MyCustomButton.h"
#import <QuartzCore/QuartzCore.h>

@implementation MyCustomButton


- (id)initWithFrame:(CGRect)frame
    //button created in code
{
    self = [super initWithFrame:frame];
    if (self) {
        [self initialise];
    }
    return self;
}

- (id)initWithCoder:(NSCoder *)aDecoder;
    //button created in Interface Builder
{
    self = [super initWithCoder:aDecoder];
    if (self) {
            [self initialise];
    }
    return self;
}

- (void)initialise;
{
    self.layer.cornerRadius  = 10.0f;
    self.layer.borderWidth = 1.0f;
    self.layer.borderColor = [[UIColor  lightGrayColor] CGColor];
}

@end

自動レイアウトを無効にしている場合は、IBで「RoundedRect」ボタンスタイルを引き続き使用して、レイアウトの正しい外観を提供できますが、カスタムボタンのロード時にスタイルは無視されます。自動レイアウトが有効になっている場合は、IBスタイルを「カスタム」に変更する必要があります。そうしないと、ボタンフレームが期待どおりに動作しないことがわかります。

于 2013-02-08T19:06:14.417 に答える