【问题标题】:Get Touches in SuperView after adding SubView添加 SubView 后在 SuperView 中获取 Touches
【发布时间】:2012-03-23 01:43:21
【问题描述】:

从 XCode 4.2 中的 Single View iOS 模板开始,我在 .xib 中添加了第二个视图,主视图上的“超级”按钮和子视图上的“子”按钮。我希望能够同时点击这两个按钮。

在视图控制器的界面中,我添加了:

IBOutlet UIView *subView;

然后在我的视图控制器的 viewDidLoad 方法中,我添加:

 [self.view addSubview:subView];

在[super viewDidLoad]之后;

subView 的背景为“clear”,两个窗口都设置为“User Interaction Enabled”。

当我运行应用程序时,只有“子”按钮是可点击的。我可以看到“超级”按钮,但它似乎没有收到触摸,据我从 Apple 的文档中可以看出,这应该是默认行为(视图的透明区域应该允许触摸通过)。

【问题讨论】:

    标签: objective-c ios


    【解决方案1】:

    这不是发生的事情,如果你把一个视图放在另一个视图前面,后面的视图将不会收到触摸。

    您可以在前视图中禁用用户交互,因此后视图将接收到触摸。

    但我认为您希望前视图和后视图可点击,在这种情况下您需要做的是获取触摸并将其发送到后视图,并在后视图中处理它。

    我不知道你想做什么,但我认为,你可能可以做出比这更好的选择。

    您可以在 stackoverflow 中查看这个问题: detect touch on a view behind another view?

    编辑:

    你有很多选择来发送触摸。

    你可以这样做(这不是一个好的选择):

    -(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event{
        for (UITouch *touch in touches) {        
            for(UIView* v in self.view.subviews){
                if([v pointInside:[touch locationInView:self.view] withEvent:event]){
                    if ([v isKindOfClass:[UIButton class]]) {
                        [(UIButton*)v sendActionsForControlEvents:UIControlEventTouchUpInside];
                    }
    
                }
            }
        }    
    }
    

    您还可以编辑视图框架,使视图不会覆盖按钮。

    您还可以将按钮带到新子视图的前面,执行以下操作:

    [self.view addSubview:yourSubview];
    [self.view bringSubviewToFront:yourButton];
    

    你只需要发挥你的创造力;)

    【讨论】:

      【解决方案2】:

      您的第二个视图是内容(按钮)的大小还是整个视图的大小?您可能会发现将子视图设置为对象的大小比 320x480 更容易。然后在将其添加为子视图后通过 cgrectmake 对其进行对齐。

      这比冒泡各种触摸更容易,这有点像噩梦。

      【讨论】:

      • 是整个视图的大小。对于这个项目,将其设为小视图会起作用,但我很想学习如何正确地为全屏叠加层添加修饰。
      猜你喜欢
      • 2013-07-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-06
      • 1970-01-01
      相关资源
      最近更新 更多