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
But when I click these buttons , they do not work at all , please help me with this, thank you very much.
This is probably a touch handeling event issue. Ie the touches are never getting to you custom button. To debug this:
UIGestureRecognizer
- they can interfere with touch handeling. I had the same issue when I already had button below the superview of my button, for which I wanted to add target. I have changed the frame of my button., then the problem was solved
The method: (id)initWithFrame:(CGRect)frame
is not used to create those PaiLifeCustomButton type buttons.
Or set a frame manually after calling init. I'vent looked much into your code but it all looks fine. Set breakpoints to see if your code runs or not.
I had the same issue,the problem is My view was creating with init instead of initWithFrame. Incase Anyone have same issue, then it may help you.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.