objective-c - 子类化UIButton,但是我无法执行“addTarget:action:forControlEvents:”吗?

标签 objective-c ios cocoa-touch

我已经将UIButton子类化以绘制图形,但是“addTarget”将无法工作。

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

我对此方法没有做任何调整。

按钮图形在“触摸”上正常运行。

如果我使用标准的UIButton,则“addTarget”可以正常工作。

不确定我缺少什么?

谢谢
#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

最佳答案

完成事件处理后,您必须从事件处理程序中调用super。该按钮还如何知道触摸来调用您的操作?

例如

- (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可能会比较棘手。但是,似乎您已将事情控制在一定范围内(大部分情况下)。祝好运!

关于objective-c - 子类化UIButton,但是我无法执行“addTarget:action:forControlEvents:”吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9577767/

相关文章:

ios - 设置 UIScrollView 滚动区域

ios - Swift iOS 中的 Facebook 相册访问

ios - 在ios7中拍摄状态栏快照

ios - 打开手机应用程序而不调用电话

iphone - iPhone应用程序:如何使用MPMoviePlayerController在应用程序中播放Youtube视频

iphone - 在 UITableView 中按字母顺序显示 .plist 键值

objective-c - 如何在 Objective C 中获取这些对象数组中的对象的属性?

objective-c - 即使在数据库中创建了项目,NSFetchedResultsController也不会获取结果

iphone - [NSDate date] 返回本地日期和时间吗?

ios - FBSDKSharingDelegate 回调不起作用,即使发布工作正常