【问题标题】:How to make buttons unclickable behind a small UIView?如何使小 UIView 后面的按钮无法点击?
【发布时间】:2011-09-30 22:06:46
【问题描述】:

我有一个奇怪的问题。我有 3 个级别的视图:

- MainView
    - containerview
        - subview
            -some buttons
    -some buttons

我制作了一个动画,通过单击主视图中的按钮使我的子视图出现和消失。以下是让子视图消失并重新出现的部分代码:

 [UIView animateWithDuration:0.4 //begin animation
                      delay:0.1 
                    options:UIViewAnimationCurveEaseIn 
                 animations:^{
                     [UIView transitionWithView:containerview 
                                       duration:0.4
                                        options:UIViewAnimationOptionTransitionCurlUp
                                     animations:^{ [subView removeFromSuperview] ;}
                                     completion:nil];
                     containerview.alpha = 0;

                 } 
                 completion:^(BOOL finished){
                     saveButton.hidden = true;
                     saveDAVButton.hidden = true;    
                     saveDBButton.hidden = true; 
                     loadButton.hidden = false;
                     openDAVButton.hidden = false;    
                     openDBButton.hidden = false;
                     [UIView transitionWithView:containerview 
                                       duration:0.4
                                        options:UIViewAnimationOptionTransitionCurlDown
                                     animations:^{ [containerview addSubview:subView] ;}
                                     completion:nil];
                     containerview.alpha = 1;
                 }
 ];

这个动画效果很好。唯一的问题是,即使子视图可见(子视图按钮也是如此),我也可以单击子视图后面的按钮! (主视图中的按钮)。这使得子视图中的按钮难以使用,因为它们与主视图中的按钮重叠。

知道如何使子视图后面的元素不可点击吗?

我已经尝试禁用和隐藏主视图中的按钮,但即便如此,我也无法使用子视图中的重叠按钮!

感谢您的帮助。

更新 我找到了问题所在。实际上,我必须再次使我的帖子更清晰。这是视图的层次结构,有位置和大小:

- MainWindow (0,0,768,1024)
    - MainView (0,0,768,80) (this is actually a top tool bar)
        - containerview (500,40,120,80)
            - subview (500,40,120,80) (will act as a post it : curl up and down...)

所以,问题是我的子视图的底部超出了 MainView。当单击按钮放置在子视图的底部时,什么也没有发生。事实上,我正在点击 MainWindow!一半的子视图无法点击...

在更改我的所有代码之前,即使他是 MainView 的一部分,是否有办法使子视图的底部可访问?还是我必须在 MainWindow 中移动它?

再次感谢...

【问题讨论】:

    标签: iphone ipad uiview ios4 uiviewanimation


    【解决方案1】:

    切换视图的 userInteractionEnabled 属性。

    【讨论】:

    • 我现在不在工作,但我想知道这个属性是否会禁用主视图中的所有按钮?我只想禁用子视图后面的按钮,这样用户就可以从主视图中单击其他按钮...
    • 这会向下级联视图层次结构。这样做的方法不好。
    • 嗯,我想我误解了这个问题(也许编辑让它更清楚了?),肯尼可能是对的,这不是你想要的。不过,您可以对其他按钮所在的容器执行此操作。
    • 是的,抱歉,我意识到我的第一次编辑根本不清楚!
    【解决方案2】:

    问题可能是主视图中的按钮位于容器视图的前面。试试:

    [MainView bringSubviewToFront:containerView];
    

    或者在界面生成器中重新排列 containerView 的顺序和主视图中的按钮。

    但我不知道,将按钮设置为隐藏应该使它们隐藏且不可点击,并防止它们阻挡对它们后面的视图的触摸。

    【讨论】:

    • 就是这样。容器视图中的按钮都在容器视图之外的按钮后面。您可以将容器视图背景颜色设置为 0.5 不透明度,以查看前面和后面的内容,并更好地了解视图层次结构。
    • 我明天试试这个。但我确认,即使禁用或隐藏,我也不能使用子视图中的按钮重叠主视图中的按钮!我还确认子视图似乎在顶部,因为我可以看到他的按钮而我看不到后面的按钮(从主视图)。不管怎样,我明天试试bringSubviewToFront,谢谢你的帮助!
    • 我确实再次更新了我的帖子。我指出了问题所在,但我仍然需要解决方案......
    【解决方案3】:

    看到你最新的编辑,也许你可以检查你的 clipsToBounds 属性(虽然当事情超出父母的界限时让一切正常工作可能很棘手 - 我现在不记得了,但我可能已经放弃并改变了我的包含层次结构)。

    【讨论】:

    猜你喜欢
    • 2020-07-21
    • 2020-05-02
    • 2011-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多