0

ボタンの独自のサブクラスを作成しましたが、-[UIRoundedRectButton setup]: unrecognized selector sent to instance 0x7c3e600' を取得しています。

これは、buttonWithType が明らかにオレンジ色のボタンではないボタンを返すためだと思いますが、これを行う方法がわかりません!

  @implementation OrangeButton

    +(id)Create
    {
        OrangeButton *button = (OrangeButton*)[OrangeButton buttonWithType:UIButtonTypeRoundedRect];
        [button setup];
        return button;
    }

    -(void) setup
    {
        [self setBG];     
    }
    -(void)setBG
    {
        [self setBackgroundImage:[UIImage imageNamed:@"bg-button-orange.gif"] forState:UIControlStateNormal];
    }

    @end
4

2 に答える 2

1

カスタムクラスを作成したので、可能だと思います

.h では、ファイル

@interface OrangeButton : UIButton
{
}
-(void) setBG;
@end

.m ファイル内

@implementation OrangeButton

- (id) initWithFrame: (CGRect)frame
{
     self = [UIButton buttonWithType: UIButtonTypeRoundedRect];

     // set frame
     self. frame = frame;

     if (self) 
     {
        // change bg color   
        [self setBG];

        return self;
     }

    return nil;
}

-(void) setBG
{
    [self setBackgroundImage:[UIImage imageNamed:@"bg-button-orange.gif"] forState:UIControlStateNormal];
}

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

@end

今すぐ使いたいときは電話してください

OrangeButton *obj= [[OrangeButton alloc] initWithFrame: CGRectMake(0, 0, 90, 40)];
[obj setContentMode: UIViewContentModeScaleAspectFit];

// add it to the view
[self addSubview: obj];

// assign action
[obj addTarget: self action: someAction forControlEvents: UIControlEventTouchUpInside]; 

これでいけると思います

于 2012-08-23T05:43:38.697 に答える
1

最近、同様の問題がありました。UIButton は実際にはクラス クラスタです。つまり、UIButton をインスタンス化すると、内部の Button クラスが返される可能性があります (ボタンの種類によってクラスが異なる可能性がありますが、これは実装の詳細です)。このような Apple クラスがいくつかあります (NSData は別のクラスです)。

残念ながら、これは UIButton をサブクラス化することが (現実的には) 不可能であることを意味します。同様の種類の機能が必要だが、そのままの UIButton を使用したくない/使用できない場合は、UITapGestureRecogniser が添付された UIView が私の最初の呼び出しポイントになります。

編集:

UITapGestureRecognizer を UIView にアタッチすると、UIButton に非常によく似た (および追加の追加機能、たとえば可変タップ数) 機能が提供されます。ただし、代わりに次のように記述します。

[someButton addTarget:aTarget action:yourSelector forControlEvents:UIControlEventTouchUpInside];

ジェスチャ認識エンジンを作成してアタッチする必要があります。

UITapGestureRecognizer *tgr = [[UITapGestureRecognizer alloc] initWithTarget:aTarget action:yourSelector];
yourUIView.userInteractionEnabled = YES;
[yourUIView addGestureRecognizer:tgr];

エッジを丸くしたい場合は、次を追加します。

yourUIView.layer.cornerRadius = 5 // example value

レイヤー プロパティを取得するには、QuartzCore.h ヘッダーをインポートする必要があります。

于 2012-08-23T04:21:11.990 に答える