【问题标题】:Single Tapping not being detected on dynamically created uibuttons在动态创建的 uibutton 上未检测到单击
【发布时间】:2013-12-12 15:26:00
【问题描述】:

有必要创建一个 UIButton 的子类,我们称之为 subButton。这些 subButton 被一一实例化并动态添加到 UIScrollView 对象中。

不幸的是,子按钮没有按预期做出反应。滚动离开第一个动态生成的子按钮后,然后返回它们。他们失去了对单击的反应。我无法解释这种行为。有人可以解释为什么它会这样吗?

非常感谢。

源代码

self.subButton = [[SubButton alloc]initWithFrame:CGRectMake(69.5, y, 201, 114)];
[self.subButton setBackgroundColor:[UIColor blueColor]];
self.subButton.imageData = imageData;
self.subButton.videoPath = videoPath;
self.subButton.vidIndex = _indexVideo +1;
[self.subButton drawVidPreview];
[self.subButton setTag:(_indexVideo +1)];
[self.subButton addTarget:self action:@selector(handleSingleTap:) forControlEvents:UIControlEventTouchUpInside];
[self.videoScroll addSubview:self.subButton];
[_videoPreviews addObject:self.subButton];

subButton 方法 drawVidPreview 将一些子视图添加到自身。

【问题讨论】:

  • 可以添加按钮的代码吗?

标签: ios dynamic uiscrollview uibutton subclassing


【解决方案1】:

按钮根本没有响应,或者只是没有单击?这可能会帮助我们帮助您。

如果他们根本没有响应,我会检查您的视图层次结构,以确保没有其他视图(可能是不可见的)位于您的按钮上方。或者,也许按钮没有添加到您认为的父视图中?

【讨论】:

  • 这些都是好问题。如果我将代码更改为 [self.subButton addTarget:self action:@selector(handleSingleTap:) forControlEvents:UIControlEventTouchUpOutside]; 它们实际上会对单击做出反应但是反应太敏感了。它与滚动冲突。
  • 是的,这两行我都需要,很可能是缺乏这方面的知识。我不知道如何获取 UIScrollview 对象的子视图,这就是为什么我将它们添加到 NSMutableArray,以便能够修改它们在选择时的位置。
  • 也许可以试试:UIControlEventTouchDown 看看它对你有用。
  • 谢谢,那是我真正的意思,它对我不起作用。作为一个(UIControlEventTouchUpOutside)我不小心写了下来。
【解决方案2】:

请确保您没有向所有UIButtons 添加相同的UIGestureRecognizer 实例,而是为每个UIButton 添加一个单独的实例,但是所有手势实例都可以指向同一个目标。

【讨论】:

  • 感谢您的提醒,但事实并非如此。
【解决方案3】:

我终于可以解决问题了。第一个 subButtons 没有响应 UIControlEventTouchDown 的单击的原因是因为 uiScrollview 内容偏移设置为负 y 值。这首先是没有必要的,纯粹是出于懒惰。我通过给它一个正值来纠正它。

所以我的结论是,如果你没有正确设置 scrollView 的内容偏移或内容大小,一些动态添加到 scrollView 的按钮可能无法正确响应点击。如果所有按钮都完全放置在 uiScrollview 对象上,情况也是如此。

我也可以通过调整 uiScrollview 实例的内容大小来确认这一点。我将 uiScrollviews 实例的 y 值的大小更改了几个点,然后最后一些按钮不再响应点击。

只需再次增加 y 值的内容大小,即可使按钮再次响应。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-10-10
    • 1970-01-01
    • 1970-01-01
    • 2016-04-22
    • 2023-03-29
    • 2020-01-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多