2012-03-06 6 views
1

UIButtonをサブクラス化してグラフィックスを描画しましたが、「addTarget」は機能しません。UIButtonをサブクラス化していますが、「addTarget:action:forControlEvents:」を実行できません。

- (void)addTarget:(id)target action:(SEL)action forControlEvents:(UIControlEvents)controlEvents 

私はその方法を調整することを何もしなかった。

「タッチ」でボタンのグラフィックスが正常に機能します。

標準のUIButtonを使用すると、「addTarget」が正常に動作します。

私は行方不明ですか?あなたはあなたがすべてのイベントを処理完了したら、あなたのイベントハンドラからスーパーを呼び出す必要があり

THX

#import <UIKit/UIKit.h> 

@interface CButton : UIButton 
{ 
    CGContextRef c; 
    int myState; 
} 
@end 

#import "CButton.h" 

@implementation CButton 

- (id)initWithFrame:(CGRect)frame 
{ 
    self = [super initWithFrame:frame]; 
    if (self) { 
     // Initialization code 
    } 
    //NSLog(@"init state: %d", self.state); 
    return self; 
} 


- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{ 
    // myState = 1; 
    myState = !myState; 
    // NSLog(@"BeginState: %d", self.state); 

    [self setNeedsDisplay]; 
} 


- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event{ 
    // myState = 0; 
    // NSLog(@"EndState: %d", self.state); 
    // [self setNeedsDisplay]; 

} 

- (void)drawRect:(CGRect)rect 
{ 
    // Drawing code 

} 
@end 
+0

これはあなたの質問に答えるつもりはありませんが、 'UIButton'のサブクラス化は通常災害につながります。代わりに 'UIControl'をサブクラス化しようとします。それはもう少し仕事ですが、あなたは長期的には満足しています。 –

+0

合意して、私はいつもUIButtonのサブクラス化は悪い考えであると言われてきました。 – stephenmuss

+0

'@ interface'のサブクラスと' initWithFrame: 'と' initWithCoder: 'メソッドの実装を示してください。 – Costique

答えて

3

。あなたの行動を呼び出すために、ボタンはどのように接触を知っていますか?

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{ 
    // myState = 1; 
    myState = !myState; 
    // NSLog(@"BeginState: %d", self.state); 

    [self setNeedsDisplay]; 

    [super touchesBegan:touches withEvent:event]; // you need this 
} 

あなたの元の投稿のコメントは正しく、UIButtonをサブクラス化することは難しいと言われています。しかし、あなたがコントロールしているもの(主に)を持っているかのように見えます。がんばろう!

+0

私は両方のtouchesのためにスーパーをしなければならなかったBeanとtouchesEnded ... thx – Woof

関連する問題