目标 C:子视图不可点击

Posted

技术标签:

【中文标题】目标 C:子视图不可点击【英文标题】:Objective C: Subview not clickable 【发布时间】:2012-03-29 09:05:46 【问题描述】:

我即将为 iPhone 应用实现类似 Facebook 的侧边导航。我可以毫无问题地将其滑入和滑出,但是当我想单击该导航视图中的按钮或任何内容时,什么也没有发生。

这是我在 viewDidLoad 中初始化的侧面导航视图的代码:

self.sideNavigationView = [[UIView alloc] initWithFrame:CGRectMake(self.navigationController.view.frame.size.width, 20, 238, self.navigationController.view.frame.size.height-20)];
[self.navigationController.view addSubview:self.sideNavigationView];

然后我有下面的方法可以把它滑进去:

- (IBAction) openMenuBar: (id) sender        
if (!self.sideNavigationIsExpanded) 
    self.sideNavigationView.frame = CGRectMake(self.navigationController.view.frame.size.width, 20, 238, self.navigationController.view.frame.size.height-20);


CGRect destination = self.navigationController.view.frame;
CGRect sideNavigationDestination = self.sideNavigationView.frame;

sideNavigationDestination.size.width = 238;


// Slide back
if (self.sideNavigationIsExpanded)        
    sideNavigationDestination.origin.x = self.view.frame.size.width;
    destination.origin.x = 0;
    sideNavigationDestination.origin.y = 20;
    self.sideNavigationIsExpanded = NO;
 
// Slide in
else 
    sideNavigationDestination.origin.x = self.view.frame.size.width;
    destination.origin.x = - sideNavigationDestination.size.width;            

    sideNavigationDestination.origin.y = 20;
    self.sideNavigationIsExpanded = YES;

    self.sideNavigationView.hidden = NO;



[UIView animateWithDuration:0.25 animations:^

    self.sideNavigationView.frame = sideNavigationDestination;
    self.navigationController.view.frame = destination;        


 completion:^(BOOL finished) 
    if (!self.sideNavigationIsExpanded)
        self.sideNavigationView.hidden = YES;
    self.view.userInteractionEnabled = !self.sideNavigationIsExpanded;
    self.sideNavigationView.userInteractionEnabled = self.sideNavigationIsExpanded;        
];

    

我在每个子视图中尝试了几种 userInteractionEnabled = YES 组合...什么也没改变... 难道是我的 sideNavigationView 的子视图是不可选择的,因为当我初始化它时它是看不见的?我尝试使用可见的框架(CGRectMake(0,0,238,300))对其进行初始化,并且效果很好。 -_- 那么我该如何解决我的问题呢?

【问题讨论】:

【参考方案1】:

由于 sideNavigationView 是 self.view 的子视图,那么这一行:

self.view.userInteractionEnabled = !self.sideNavigationIsExpanded;

完全阻止触摸到达您的 sideNavigationView。如果视图自己的 userInteractionEnabled 属性设置为 NO,即使您在下一行中将子视图的属性设置为 YES,视图也不会将触摸传递给其子视图。

至于屏幕外初始化,我认为这不会影响视图在移回屏幕后是否可以接收触摸。

【讨论】:

以上是关于目标 C:子视图不可点击的主要内容,如果未能解决你的问题,请参考以下文章

作为 UIWindow 子视图添加的 UIView 不响应点击

Swift - 将目标添加到子视图内的 UIButton

Swift:UIButton 不可点击,NSLayoutConstraint heightAnchor 问题

目标C - 再次点击标签栏项目时,如何再次重新加载网页视图?

如果涉及superview,则不会排除子视图点击的UIScrollView

目标C - 再次点击标签栏项目时,如何重新加载网页视图?