如何确定哪个UIView超级视图导致子视图具有userInteractionEnabled = NO?

时间:2014-04-28 15:59:20

标签: ios objective-c uiview

我有一个用userInteractionEnabled = NO显示的UIView,我无法找出原因。 Interface Builder中的设置为userInteractionEnabled检查了所有视图,代码中没有任何内容将用户交互设置为NO。但是,如果我在调试期间检查值,则视图和所有超级视图都有userInteractionEnabled == NO。

我在视图控制器中使用以下代码来循环所有视图并检查它们的交互状态,甚至将启用的值显式设置为YES:

BOOL *isEnabled = self.someView.userInteractionEnabled;
NSArray *_allViews = self.someView.window.subviews;
for (UIView *currentView in _allViews) {
    currentView.userInteractionEnabled = YES;
    isEnabled = currentView.userInteractionEnabled;
}
isEnabled = self.someView.userInteractionEnabled;

在过程的每一步中,即使我将用户交互设置为YES,isEnabled变量也始终为NO。

我可以在这里找到什么?

编辑:

从@rmaddy添加调试代码加上一点额外的我得到了这个:

UIView *view = self.someView;
while (view) {
    isEnabled = view.userInteractionEnabled;
    if (!view.userInteractionEnabled) {
        NSLog(@"view is not enabled: %@", view);
        view.userInteractionEnabled = YES;
    }
    view = view.superview;
}

当我逐步执行时,isEnabled变量始终为NO,但if(!view.userInteractionEnabled)逻辑永远不会发生。两者怎么样?有什么关于Objective-C BOOL的东西我不明白吗?如何在调试器中将isEnabled的值设为NO,而if(!view.userInteractionEnabled)条件从不适用?

现在很困惑。

1 个答案:

答案 0 :(得分:2)

尝试从子视图开始,然后走上超级视图链。

UIView *view = self.someView;
while (view) {
    if (!view.userInteractionEnabled) {
        NSLog(@"view is not enabled: %@", view);
        view.userInteractionEnabled = YES;
    }
    view = view.superview;
}