在UIView下面的按钮上启用用户交互?

时间:2012-06-11 07:19:51

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

在我的程序中,我已将UIView配置为放置在多个UIBUtton上。这样您就可以平移视图并按下按钮以及选择按钮本身。但是,当它们位于此UIView下方时,无法选择按钮。有人在UIButton userInteractionEnabled处于这些条件下时知道如何配置它们吗?

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

这项技术对我有用 - 警告:我只是在它中输入了这个未编译或nuthin它是作为起点给出的。

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

    NSMutableArray * arrayOfPeskyButtons;

  3. 记录按钮帧

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

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

    -(void)scrollViewDidScroll:(UIScrollView *)scrollView
    

    记录scrollviews偏移并相应调整按钮的每个帧,具体取决于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++;
     }