IOS UIButton 目标不起作用
Posted
技术标签:
【中文标题】IOS UIButton 目标不起作用【英文标题】:IOS UIButton Target doesnot working 【发布时间】:2014-06-25 09:14:51 【问题描述】:这是我的代码
for (NSString *message in self.messages)
label = [[UIButton alloc] initWithFrame:CGRectZero];
[label setTitle:message forState:UIControlStateNormal];
//label.titleLabel.text = message;
label.tag = i;
[label addTarget:self action:@selector(gototest:) forControlEvents:UIControlEventTouchDown];
CGSize size = [message sizeWithFont:label.titleLabel.font];
CGFloat width = size.width + kPADDING;
label.frame = CGRectMake(xPos, 0.0, width, self.frame.size.height);
[self addSubview:label];
i++;
xPos += width;
-(void)gototest:(UIButton*)sender
int tag = sender.tag;
NSLog(@"test %@",@"ccc ");
所以当我点击按钮时什么都没有发生。
请注意,该类是从 UIScrollView 扩展而来的,而且我必须创建一个包含不同新闻的选框,当我点击任何新闻时,我必须转到所选新新闻的详细信息。
请帮帮我
【问题讨论】:
UIControlEventTouchDown
应该是UIControlEventTouchUpInside
。
您的按钮是否获得了触摸事件?如果您的按钮未正确位于超级视图的框架中,则可能会错过触摸事件。另外,你有没有做出任何手势?
【参考方案1】:
UIControlEventTouchDown
应该不是问题,它也可以。你可以试试下面的
label = [UIButton buttonWithType:UIButtonTypeCustom];
而不是
label = [[UIButton alloc] initWithFrame:CGRectZero];
我也怀疑下面这行
label.frame = CGRectMake(xPos, 0.0, width, self.frame.size.height);
您设置的框架确认它是正确的,在正常使用中,您的 UIButton 可能看起来是可见的,但它可能不可见。试放
label.clipsToBounds=YES;
并检查您的 UIButton 是否真的可见,这可能是您的操作不起作用的原因..
更新
好的,根据我的理解,正如您所说,您正在尝试创建 Marquee
,而原始实现具有 UILabel
,而您正在尝试将其更改为 UIButton
。让我们改变一些东西,如下面的代码,
for (NSString *message in self.messages)
label = [[UILabel alloc] initWithFrame:CGRectZero];
label.text = message;
label.tag = i;
UITapGestureRecognizer *tapGestureRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(gototest:)];
tapGestureRecognizer.numberOfTapsRequired = 1;
[label addGestureRecognizer:tapGestureRecognizer];
label.userInteractionEnabled = YES;
CGSize size = [message sizeWithFont:label.font];
CGFloat width = size.width + kPADDING;
label.frame = CGRectMake(xPos, 0.0, width, self.frame.size.height);
[self addSubview:label];
i++;
xPos += width;
还有你的行动
-(void)gototest:(UITapGestureRecognizer*)sender
int tag = sender.view.tag;
NSLog(@"test %@",@"ccc ");
【讨论】:
@Houssam 你能在最后加上NSLog(@"%@",NSStringFromCGRect(label.frame));
并告诉我输出吗?
16, 0, 84, 30 100, 0, 111, 30 211, 0, 90, 30 301 , 0, 102, 30 403, 0, 85, 30 488, 0, 84, 30
请你给我你的电子邮件我需要发送给你的项目
或者在 Skype 上告诉我你的名字【参考方案2】:
使用“UIControlEventTouchDown”的触摸事件“UIControlEventTouchUpInside”。
【讨论】:
@Houssam 问题不在于您的代码,我使用了相同的代码,但对于单个按钮,它工作正常。 UIButton *label = [[UIButton alloc] initWithFrame:CGRectZero]; [label setTitle:@"Click" forState:UIControlStateNormal]; //label.titleLabel.text = message;标签.tag = 0; [label addTarget:self action:@selector(gototest:) forControlEvents:UIControlEventTouchDown]; label.frame = CGRectMake(0,0,100,50); [self addSubview:label]; 可能问题出在选框上,我不知道【参考方案3】:它会正常工作:
[label addTarget:self action:@selector(grottiest:) forControlEvents:UIControlEventTouchUpInside];
编辑:
label = [[UIButton alloc] initWithFrame:CGRectMake(xPos, 0.0, 100, 100)];
[label setTitle:message forState:UIControlStateNormal];
//label.titleLabel.text = message;
label.tag = i;
[label addTarget:self action:@selector(gototest:) forControlEvents:UIControlEventTouchUpInside];
[self addSubview:label];
【讨论】:
sry 伙计,它没有用,你能给我一个带选框但可点击的例子 我认为问题出在这一行:CGSize size = [message sizeWithFont:label.titleLabel.font];你能测试我的编辑吗? 或者只是控制按钮显示时的框架:)【参考方案4】:您的代码在单个按钮上运行良好。问题出在其他地方..
UIButton *label = [[UIButton alloc] initWithFrame:CGRectZero];
[label setTitle:@"Click" forState:UIControlStateNormal];
//label.titleLabel.text = message;
label.tag = 0;
[label addTarget:self action:@selector(gototest:) forControlEvents:UIControlEventTouchDown];
label.frame = CGRectMake(0,0,100,50);
[self addSubview:label];
【讨论】:
问题区域可以是CGSize size = [message sizeWithFont:label.titleLabel.font];【参考方案5】:替换:
label = [[UIButton alloc] initWithFrame:CGRectZero];
与
UIButton *label = [[UIButton alloc] initWithFrame:CGRectZero];
【讨论】:
也许更详细的信息可以很好地解释原因。见How to Answer以上是关于IOS UIButton 目标不起作用的主要内容,如果未能解决你的问题,请参考以下文章
如果 UIWINdow 的子视图,UIButton 单击不起作用