简体   繁体   English

UIButton addTarget不起作用

[英]UIButton addTarget does not work

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. 这可能是一个触摸handeling事件问题。 Ie the touches are never getting to you custom button. 即触摸永远不会得到你自定义按钮。 To debug this: 要调试这个:

  1. What is your button's subclass? 你的按钮的子类是什么?
  2. Check userInterction enabled? 检查userInterction是否已启用?
  3. Check your superviews of the button for UIGestureRecognizer - they can interfere with touch handeling. 检查UIGestureRecognizer按钮的UIGestureRecognizer视图 - 它们可以干扰触摸操作。
  4. Is you clipsToBounds property NO? 你是clipToBounds属性吗? 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. 覆盖自定义按钮中的touchesBegan以查看是否正在调用它。

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. 方法: (id)initWithFrame:(CGRect)frame不用于创建那些PaiLifeCustomButton类型按钮。

Or set a frame manually after calling init. 或者在调用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. 我遇到了同样的问题,问题是我的观点是用init而不是initWithFrame创建的。 Incase Anyone have same issue, then it may help you. Incase任何人有同样的问题,那么它可能会帮助你。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM