Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

UIButton addTarget does not work

Tags:

ios

uibutton

ViewController:

@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

Custom View:

@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

But when I click these buttons , they do not work at all , please help me with this, thank you very much.

like image 269
jxdwinter Avatar asked Dec 15 '22 13:12

jxdwinter


1 Answers

This is probably a touch handeling event issue. I.e. the touches are never getting to you custom button. To debug this:

  1. What is your button's subclass?
  2. Check userInterction enabled?
  3. Check your superviews of the button for UIGestureRecognizer - they can interfere with touch handeling.
  4. Is you clipsToBounds property NO? If so are the touches outside the bounds of the view?
  5. Override the touchesBegan in your custom button to see if its being called.
like image 134
Robert Avatar answered Dec 18 '22 03:12

Robert