iOS UIButton点击不起作用

Posted

技术标签:

【中文标题】iOS UIButton点击不起作用【英文标题】:iOS UIButton click doesn't work 【发布时间】:2015-05-19 11:07:12 【问题描述】:

我遇到了 ios UIButton 以编程方式处理点击的问题。

我有一个UIButton

- (UIButton *)compareButton

    if (!_compareButton)
    
        NSString *title = TITLE;

        NSDictionary *attributes = TITLE_ATTRIBUTES;

        NSAttributedString *attributedTitle = [[NSAttributedString alloc] initWithString:title attributes:attributes];

        _compareButton = [[UIButton alloc] initWithFrame:CGRectMake(0.0f, 20.0f, 100.0f, 44.0f)];

        _compareButton.backgroundColor = [UIColor redColor];

        [_compareButton setAttributedTitle:attributedTitle forState:UIControlStateNormal];
        [_compareButton addTarget:self action:@selector(buttonCompareClicked:) forControlEvents:UIControlEventTouchUpInside];
    

    return _compareButton;

UIButton点击应该由方法处理

- (void)buttonCompareClicked:(UIButton *)sender

另外,我有一个UIView

- (UIView *)header

    if (!_header)
    
        UIView *header = [[UIView alloc] init];

        header.backgroundColor = [UIColor whiteColor];

        [self.view addSubview:header];

        _header = header;
    

    return _header;

我的按钮是一个视图的子视图:

[self.header addSubview:self.compareButton];

启用所有用户交互:

self.view.userInteractionEnabled = YES;
self.header.userInteractionEnabled = YES;
self.compareButton.userInteractionEnabled = YES;

尽管如此,按钮单击不会触发方法调用。

这可能是哪里出了问题?

【问题讨论】:

您是否设置了 IBAction 连接? 您是否使用故事板或任何包含按钮的 XIB 文件? 我看不到您在哪里设置标题的框架,或者添加约束以使用自动布局进行布局。它的宽度和高度可能为零。尝试设置其backgroundColor 属性,以便查看它是否具有有效大小。 看看我的吸气剂!有一个backgroundColor 集。标题的框架是正确的。在添加子视图的那一刻,标题框架等于零,但它不应该改变任何东西。 我没有使用 XIB 或情节提要... 【参考方案1】:

我认为问题出在self.header。您需要为其设置框架。

self.header.frame = CGRectMake(0, 0, 320, 80);

在此之后,您的按钮应该开始注册触摸。

为什么?

好问题。

由于self.header 的图层具有maskToBounds 属性,默认设置为no,因此您在header 视图中添加的任何视图都将可见。但是由于您的header 视图没有可点击的区域,因此任何subviews 都无法点击。这就是为什么您的按钮没有记录触摸的原因。

【讨论】:

非常感谢您的精彩回答和解释! 但是如果header view没有区域除非他设置,subviews怎么可见?【参考方案2】:

1-您需要设置标题视图的框架:

UIView *header = [[UIView alloc] initWithFrame:CGRectMake(0.0f, 20.0f, 100.0f, 44.0f)];

2-所以在这种情况下,将按钮的框架设置为相对于标题视图:

_compareButton = [[UIButton alloc] initWithFrame:CGRectMake(0.0f, 0.0f, 100.0f, 44.0f)];

3-不要忘记将 compareButton 属性设置为 strong:

@property (nonatomic, strong) UIButton *compareButton;

【讨论】:

【参考方案3】:

请尝试一下。

[self.header addSubview:[self compareButton]];

希望对你有所帮助.....

【讨论】:

为什么这会有帮助? self.compareButton 实际上调用 [self compareButton] ,所以这不会改变任何东西 它不会改变任何东西 我认为,您应该在更改此 UIButton 的 ControlEvents 后尝试。 更改此 UIControlEventTouchUpInside 并尝试。【参考方案4】:
    //Better to Use Below lines
    _comparebutton=[UIButton buttonwithtype:UIButtontyperoundrect];
    [_comparebutton setframe:CGRectMake(0.0f, 20.0f, 100.0f, 44.0f)];
    //instead of
    //_compareButton = [[UIButton alloc] initWithFrame:CGRectMake(0.0f, 20.0f, 100.0f, 44.0f)];

【讨论】:

【参考方案5】:

如下修改你的代码

- (UIView *)header

    if (!_header)
    
        UIView *header = [[UIView alloc] initWithFrame:CGRectMake(0.0f, 0.0f, 100.0f, 44.0f)];

        header.backgroundColor = [UIColor whiteColor];

        [header addSubView:[self compareButton]];//add this line of code

        [self.view addSubview:header];

        _header = header;
    

    return _header;

//和修改

- (UIButton *)compareButton

    if (!_compareButton)
    
        NSString *title = TITLE;

        NSDictionary *attributes = TITLE_ATTRIBUTES;

        NSAttributedString *attributedTitle = [[NSAttributedString alloc] initWithString:title attributes:attributes];

      _compareButton=[UIButton buttonWithType:UIButtonTypeCustom];//modified
      _compareButton.frame=CGRectMake(0.0f, 20.0f, 100.0f, 44.0f);//modified

        _compareButton.backgroundColor = [UIColor redColor];

        [_compareButton setAttributedTitle:attributedTitle forState:UIControlStateNormal];
        [_compareButton addTarget:self action:@selector(buttonCompareClicked:) forControlEvents:UIControlEventTouchUpInside];
    

    return _compareButton;


-(IBAction)buttonCompareClicked:(id)sender

    NSLog(@"@@@@@@@@@Button Compare Called@@@@@@@");

希望它能解决问题....!

【讨论】:

以上是关于iOS UIButton点击不起作用的主要内容,如果未能解决你的问题,请参考以下文章

iOS 以编程方式创建的按钮不起作用

UIButton点击声音不起作用?

iOS:UIButton标题阴影颜色不起作用[关闭]

UIButton动作不起作用ios

如果 UIWINdow 的子视图,UIButton 单击不起作用

IOS UIButton 目标不起作用