打开子视图后仍然可以触摸背景uiview

时间:2015-08-20 09:06:40

标签: ios swift

我意识到当从父UIViewcontroller打开一个新的UIVewcontroller并触摸我的ChildViewContorller上的空白区域(没有GUI元素控件)时,它会调用Parents touchesBegan:

override func touchesBegan(touches: Set<NSObject>, withEvent event: UIEvent) {

我父母的观点(在屏幕上看不到)。

有什么不妥或如何防止这种情况?

2 个答案:

答案 0 :(得分:0)

我确实以这种方式在我的应用中解决了这个问题 1.首先定义一个代表当前视图控制器的枚举

enum ViewControllerState {
    case FirstViewController
    case SecondViewController
    // ....
}

2。然后定义一个协议,为那些需要此行为的视图控制器定义此规则

protocol ViewControllerStatePresentation {
    var viewControllerState: ViewControllerState
}

3。接下来,使所有视图控制器(需要此行为的视图控制器)确认此协议。

class ViewController: ViewControllerStatePresentation {
    var viewControllerState: ViewControllerState! 
}

4。现在,当您呈现子视图控制器时,然后更改viewControllerState。当viewControllerState是childViewController时,将childViewController的父视图userInteractionEnabled属性设置为false,否则将其设置为true。

答案 1 :(得分:0)

我找到了一个简单的解决方案。我仍然不确定这是否是最佳做法,但这对我来说是最易于维护的方式。

我刚刚将以下内容添加到uiviewcontroller:

override func touchesBegan(touches: Set<NSObject>, withEvent event: UIEvent) {
}

override func touchesEnded(touches: Set<NSObject>, withEvent event: UIEvent) {
}

在空旷的地方触摸时,它什么都不做。