如何将点击动作添加到自定义 UIButton?

Posted

技术标签:

【中文标题】如何将点击动作添加到自定义 UIButton?【英文标题】:How to add tap action to a custom UIButton? 【发布时间】:2012-12-09 13:03:20 【问题描述】:

我有一个加载 Nib 的子类 UIButton:

@implementation BlaButtonVC

- (id)initWithFrame:(CGRect)frame

    self = [super initWithFrame:frame];
    if (self) 
        NSArray *subViews = [[NSBundle mainBundle] loadNibNamed:@"BlaButton" owner:self options:nil];
        [self addSubview:subViews[0]];
    
    return self;


@end

我可以将此按钮添加到视图中,如下所示:

// ViewController.m
- (void)viewDidLoad

    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.

    BlaButtonVC *button = [[BlaButtonVC alloc] initWithFrame:CGRectMake(10, 10, 280, 44)];

    button.titleXLabel.text = @"Bls";
    button.descLabel.text = @"Kues";

    [button addTarget:self action:@selector(tap:) forControlEvents:UIControlEventTouchUpInside];

    [button becomeFirstResponder];

    [self.view addSubview:button];


-(IBAction)tap:(id)sender

    NSLog(@"sssss");

我的问题是 tap: 方法不会被调用。还尝试了一个普通的 UIButton,它确实有效,所以它一定是自定义 xib 文件的问题,我真的不知道哪个视图首先响应点击动作?如何将按钮设置为响应点击操作的按钮?

我错过了什么?

您可以在此处找到完整的 xcode 项目:https://www.dropbox.com/s/zjhwy7jm8jcywz4/blabla1_111.zip

谢谢!

【问题讨论】:

代码看起来不错。如果您省略 XIB 并完全以编程方式创建按钮会怎样? 【参考方案1】:

禁用视图的子视图,因为它们会捕捉到触摸。 在 xib (userinteraction enabled) 或代码中:

((UIView *)subViews[0]).userInteractionEnabled = NO;

【讨论】:

以上是关于如何将点击动作添加到自定义 UIButton?的主要内容,如果未能解决你的问题,请参考以下文章

使用自动布局将 UIButton 添加到自定义单元格

将 UIImageView 或 UITextView 添加到自定义 UIButton 类的正确方法是啥?

将来自 url 的图像添加到自定义 InfoWindow google maps v2

点击swift 3 iOS时UIButton没有动作

UIButton 移动到自定义单元格中的情节提要

更改 UIToolBar 中所有按钮的 UIButton 状态