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

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

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

UIButton动作不起作用ios

iOS UIButton点击不起作用

iOS - UIPageControl 上的 UIButton 不起作用

iOS:UIButton 的动画文本位置不起作用