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点击不起作用的主要内容,如果未能解决你的问题,请参考以下文章