2013-02-25 115 views
3

的ViewController:的UIButton addTarget不起作用

@implementation PaiLifeViewController 
@synthesize detail = _detail; 
- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view, typically from a nib. 
    UIImage *i = [UIImage imageNamed:@"menu_patcode_normal"]; 
    UIButton *c1 = [[UIButton alloc] init]; 
    c1.tag = 11; 
    UIButton *c2 = [[UIButton alloc] init]; 
    c2.tag = 12; 
    UIButton *c3 = [[UIButton alloc] init]; 
    c3.tag = 13; 
    UIButton *c4 = [[UIButton alloc] init]; 
    c4.tag = 21; 
    UIButton *c5 = [[UIButton alloc] init]; 
    c5.tag = 22; 
    UIButton *c6 = [[UIButton alloc] init]; 
    c6.tag = 23; 
    UIButton *c7 = [[UIButton alloc] init]; 
    c7.tag = 31; 
    UIButton *c8 = [[UIButton alloc] init]; 
    c8.tag = 32; 
    UIButton *c9 = [[UIButton alloc] init]; 
    c9.tag = 33; 

    [c1 setBackgroundImage:i forState:UIControlStateNormal]; 
    [c2 setBackgroundImage:i forState:UIControlStateNormal]; 
    [c3 setBackgroundImage:i forState:UIControlStateNormal]; 
    [c4 setBackgroundImage:i forState:UIControlStateNormal]; 
    [c5 setBackgroundImage:i forState:UIControlStateNormal]; 
    [c6 setBackgroundImage:i forState:UIControlStateNormal]; 
    [c7 setBackgroundImage:i forState:UIControlStateNormal]; 
    [c8 setBackgroundImage:i forState:UIControlStateNormal]; 
    [c9 setBackgroundImage:i forState:UIControlStateNormal]; 

    NSArray *c = [[NSArray alloc] initWithObjects:c1,c2,c3,c4,c5,c6,c7,c8,c9, nil]; 
    _detail= [[PaiLifePageDetail alloc] initWithDataSource:c pageIndex:1]; 
    for (UIButton *b in c) 
    { 
     [b addTarget:self action:@selector(clicked:) forControlEvents:UIControlEventTouchUpInside]; 
    } 
    [self.view addSubview:_detail]; 
} 

- (void) clicked : (UIButton *) button 
{ 
    NSLog(@"button = %i", button.tag); 
} 

@end 

自定义视图:

@implementation PaiLifePageDetail 
#define MARGINTOTOP 120.0 
#define MARGINTOLEFT 20.0 
#define WIDTH 80.0 
#define HEIGHT 60.0 

- (id) initWithDataSource : (NSArray *) dataSource pageIndex : (int) pageIndex; 
{ 
    self = [super init]; 
    if (self) 
    { 
     if (dataSource) 
     { 
      for (UIButton *button in dataSource) 
      { 
       //page 1 line 1 
       if (pageIndex == 1) 
       { 
        if (button.tag == 11) 
        { 
         button.frame = CGRectMake(MARGINTOLEFT, MARGINTOTOP, WIDTH * 2 + 20, HEIGHT); 
         [self addSubview:button]; 
        } 
        else if (button.tag == 12) 
        { 
         button.frame = CGRectMake(MARGINTOLEFT + WIDTH * 2 + 20 * 2, MARGINTOTOP, WIDTH, HEIGHT); 
         [self addSubview:button]; 
        } 
       } 
       //not page 1 line 1 
       else 
       { 
        if (button.tag == 11) 
        { 
         button.frame = CGRectMake(MARGINTOLEFT, MARGINTOTOP, WIDTH, HEIGHT); 
         [self addSubview:button]; 
        } 
        else if (button.tag == 12) 
        { 
         button.frame = CGRectMake(MARGINTOLEFT + WIDTH + 20, MARGINTOTOP, WIDTH, HEIGHT); 
         [self addSubview:button]; 
        } 
        else if (button.tag == 13) 
        { 
         button.frame = CGRectMake(MARGINTOLEFT + (WIDTH + 20) * 2, MARGINTOTOP, WIDTH, HEIGHT); 
         [self addSubview:button]; 
        } 
       } 

       // line 2 
       if (button.tag == 21) 
       { 
        button.frame = CGRectMake(MARGINTOLEFT, MARGINTOTOP + HEIGHT + 20, WIDTH, HEIGHT); 
        [self addSubview:button]; 
       } 
       else if (button.tag == 22) 
       { 
        button.frame = CGRectMake(MARGINTOLEFT + WIDTH + 20, MARGINTOTOP + HEIGHT + 20, WIDTH, HEIGHT); 
        [self addSubview:button]; 
       } 
       else if (button.tag == 23) 
       { 
        button.frame = CGRectMake(MARGINTOLEFT + (WIDTH + 20) * 2, MARGINTOTOP + HEIGHT + 20, WIDTH, HEIGHT); 
        [self addSubview:button]; 
       } 

       // line 3 
       if (button.tag == 31) 
       { 
        button.frame = CGRectMake(MARGINTOLEFT, MARGINTOTOP + (HEIGHT + 20) * 2, WIDTH, HEIGHT); 
        [self addSubview:button]; 
       } 
       else if (button.tag == 32) 
       { 
        button.frame = CGRectMake(MARGINTOLEFT + WIDTH + 20, MARGINTOTOP + (HEIGHT + 20) * 2, WIDTH, HEIGHT); 
        [self addSubview:button]; 
       } 
       else if (button.tag == 33) 
       { 
        button.frame = CGRectMake(MARGINTOLEFT + (WIDTH + 20) * 2, MARGINTOTOP + (HEIGHT + 20) * 2, WIDTH, HEIGHT); 
        [self addSubview:button]; 
       } 
      } 
     } 
    } 
    return self; 
} 

@end 

enter image description here

enter image description here

但是当我点击这些按钮,他们没有在所有的工作,请帮助我,非常感谢。

+0

你有检查与断点,控制'for'循环进入? – 2013-02-25 16:34:57

+0

@AnoopVaidya是的,它进入循环 – jxdwinter 2013-02-25 16:39:22

回答

9

这可能是一个触摸handeling事件问题。即触摸永远不会让你自定义按钮。要调试此:

  1. 什么是您的按钮的子类?
  2. 检查userInterction是否启用?
  3. 检查您的按钮的超级浏览UIGestureRecognizer - 他们可以干扰触摸handeling。
  4. 你是clipsToBounds属性没有?如果是这样的话,触及视野范围之外的情况呢?
  5. 覆盖自定义按钮中的touchesBegan以查看它是否被调用。
+0

我改变了自定义按钮到UIButton,但仍然没有工作... – jxdwinter 2013-02-26 03:43:46

+0

其他点呢?你有没有给superviews添加任何手势识别器?覆盖touchesBegan并设置一个断点以查看它是否被调用。越多的信息越好。 – Robert 2013-02-26 09:49:46

0

方法:(id)initWithFrame:(CGRect)frame不用于创建那些PaiLifeCustomButton类型的按钮。

或者在调用init之后手动设置框架。我的代码看起来很多,但它看起来很好。设置断点以查看代码是否运行。

1

我有同样的问题,当我已经有按钮在我的按钮的超级视图下面,为此我想添加目标。我改变了我的按钮框架,然后问题解决了

+0

这是我的问题。它正在工作,但碰撞盒很小。 – 2016-03-17 10:43:03

0

我有同样的问题,问题是我的视图是用init而不是initWithFrame创建的。 Incase任何人都有同样的问题,那么它可以帮助你。