【问题标题】:Programmatically Created UIButtons Below Screen Not Working?屏幕下方以编程方式创建的 UIButton 不起作用?
【发布时间】:2023-03-12 20:00:01
【问题描述】:

我正在创建一个包含一些图像的盒子矩阵。为了管理点击并获取点击了哪个框,我在每个不可见的框内放置了一个 UIButton 以及框的大小。

我添加了事件监听器(对不起,我是 Javascript 程序员 :)),如下所示:

[button addTarget:self action:@selector(boxTapped:) forControlEvents:UIControlEventTouchUpInside];

我启动了模拟器,它工作得很好。我可以在日志中看到按钮的标签。但是,然后我向下滚动,令我惊讶的是,屏幕折叠下方的按钮都没有工作。没有发送任何事件。我对此完全感到困惑,不知道是什么原因造成的。有人有什么想法吗?

编辑: 基本上,总而言之,屏幕初始底部下方的任何内容都不会触发操作。当一个盒子的一半最初被切断时,只有在视图首次显示时暴露的(顶部)一半有效。下半部分不会触发动作。

【问题讨论】:

  • 你在什么方法下创建按钮,你用什么方法发送 addTarget:action:forControlEvents:?
  • 这里是创建按钮/框的代码:pastebin.com/p9rWh3j0。我在一个方法中创建了这些框,然后我从一个循环中调用了这个方法。
  • 好的,只是添加一些东西,当我将按钮添加到这些框中(真正的矩形 iPhone 按钮,而不是不可见的按钮)时,它们都会出现,但只有屏幕上的那些会在点击时突出显示...

标签: iphone objective-c uikit


【解决方案1】:

其中一个原因是您的按钮实际上位于框的边界之外。这些按钮仍然可见,因为您尚未将框设置为剪切边界之外的任何内容。因此这些按钮无法接收任何输入事件。

您可以尝试为您的框设置 clipsToBounds = YES 并查看按钮是否仍然可见?

【讨论】:

  • 我不完全明白 clipsToBounds 应该做什么。当我将按钮设置为红色背景色(通常没有背景色)和不透明度为 0.5(所以我也可以在它下面看到)时,它们都出现在正确的位置。但是,它们永远不会触发事件。
  • 这是一个布尔值,决定子视图(即按钮)是否可以绘制到接收者边界(即框)之外。
  • 打算将此标记为答案——我发现我将按钮放置在与显示器高度相同的视图中......外面的任何东西都无法被点击。
【解决方案2】:

确保处理 boxTapped: 的视图的边界足够大以包含最初不在屏幕上的按钮。 UIView 只能响应其自身坐标系内的触摸,但它可以包含其坐标系之外无法触摸的子视图。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多