【问题标题】:Enable user interaction on a UIButton underneath a UIVew?在 UIView 下的 UIButton 上启用用户交互?
【发布时间】:2012-06-11 07:19:51
【问题描述】:

在我的程序中,我配置了一个 UIView 以放置在多个 UIBUttons 上。这样您就可以在视图中平移并让按钮移动以及选择按钮本身。但是,当按钮位于此 UIView 下方时,无法选择它们。有谁知道在这些条件下如何配置UIButtonuserInteractionEnabled

【问题讨论】:

  • 尝试禁用覆盖按钮的 UIView 上的 userInteraction。
  • 我需要 userInteractionEnabled 将该视图设置为 true 以便我可以添加一个 UIPanGestureRecognizer 到它。
  • 如果此视图是透明的并且仅用于检测平移手势,那么为什么不将按钮放在视图顶部?
  • 我刚试过。这些按钮阻止下方的UIView 识别平移事件。
  • 是的,他们是。我还没有尝试过使用UIScrollView,但我确信我可以解决。感谢您的帮助!

标签: objective-c ios uiview uibutton user-interaction


【解决方案1】:

这项技术对我有用 - 警告:我只是输入了这个,它没有被编译,或者它只是作为一个起点。

  1. 创建按钮并将它们放置在视图层次结构的顶部(即它们正常交互和响应点击的位置,在 UIView 的顶部)
  2. 创建按钮时 - 在数组中保留对它们的引用。

    NSMutableArray* arrayOfPeskyButtons;

  3. 记录按钮框架

    NSMutableArray* arrayOfPeskyFrames = [NSMutableArray mutableArray];
    for ((UIButton*)button in arrayOfPeskyButtons)
    {
        [arrayOfPeskyFrames addObject:[NSValue valueWithCGRect:button.frame];
    }
    
  4. 当您的应用响应 UIView 上的操作时 - 平移或将其更改为 UIScrollView(可能是最好的顺便说一句),然后相应地移动按钮的框架,以便它们在用户看来是固定的.

我已经使用这种技术来创建位于滚动视图顶部的按钮“叠加层”,并且效果出奇的好。只需在 scrollView 委托方法中。

-(void)scrollViewDidScroll:(UIScrollView *)scrollView

记下滚动视图的偏移量,并根据滚动视图的偏移量相应地调整按钮的每个框架

 CGPoint offset = scrollView.contentOffset;

遍历按钮数组并移动它们。

 int index = 0;
 for ((UIButton*)button in arrayOfPeskyButtons)
 {
     CGRect originalFrame = [[arrayOfPeskyFrames objectAtIndex:index]CGRectValue];
     CGRect currentFrame = button.frame;
     //adjust frame
     //e.g.
     currentFrame.origin.x = originalFrame.origin.x + offset.x;

     button.frame = currentFrame.;
     index++;
 }

【讨论】:

    【解决方案2】:

    您应该将 UIButton 顶部的 UIView 的 userInteractionEnabled 值设置为 no,而不是更改 UIButton 的 userInteractionEnabled 的值。

    当 UIView 的 userInteractionEnabled 设置为 YES 时,UIView 正在“吃掉”事件。然后该按钮将永远不会收到任何事件。

    【讨论】:

    • 我知道它正在这样做。也许我的问题不清楚。将UIViewuserInterActionEnabled 设置为true 很重要,这样它才能识别平移事件。
    猜你喜欢
    • 1970-01-01
    • 2014-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-12
    相关资源
    最近更新 更多