iOS - 子视图控制器未接收到事件

7
最新更新:我创建了一个全新的项目,该项目与下面的项目完全相同。但是,这个测试项目实际上运行得很好,即使它看起来是一样的... 我注意到在破损版本中,父视图控制器在单击子视图控制器的视图时会接收-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event。而在工作版本中,子视图控制器按照应有的方式接收事件... 就像父视图阻止子视图一样...?
进展更新:在乱搞了一会儿后,我发现直接为子视图控制器分配框架时可以正常工作。然而,我必须使用自动布局来创建我的项目,所以我已经这样做了。由于某种原因,自动布局导致子视图控制器的视图无响应...
目前我有一个视图控制器,只有一个子视图控制器。子视图控制器的视图显示得很好,但我无法与子视图控制器进行交互。子视图控制器有几个UIButtons,但它们不响应点击。
我尝试在父视图控制器和子视图控制器中都进行此测试。
(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    NSLog(@"Touched!");
}

当在子视图控制器的视图框架中单击时,此方法会响应父视图控制器而不是子视图控制器。当直接创建并将其设置为应用程序委托中的根视图控制器时,子视图控制器也可以正常工作。
我在父视图控制器中使用的代码:
(void) viewDidLoad
{
    [super viewDidLoad];
    self.detailPageVC = [[GoalDetailsPageViewController alloc] init];
    [self.view addSubview:self.detailPageVC.view];
    [self addChildViewController:self.detailPageVC];
    [self.detailPageVC didMoveToParentViewController:self];
}

感谢您帮助一位新手!:)

你如何定义 detailPageVC - Wain
不确定你所说的定义是什么意思,抱歉。 @property GoalDetailsPageViewController *detailPageVC; ^这是你要找的吗? - Sethypie
是的,那是完整的一行吗? - Wain
是的,这就是我在GoalPageViewController头文件中的完整行。 - Sethypie
感谢您使用'touchesBegan:withEvent:'来检测哪个视图控制器检测到了事件。 - Amr Lotfy
3个回答

3

实际问题出现在我的GoalDetailsPageViewController中。问题实际上是由于尝试在UIScrollView中使用自动布局而引起的...这是一件棘手的事情。无论如何,我发布的原始代码是可以的,谢谢。


1

好的,我只能提出以下建议:

  • 确保您的按钮和子视图控制器的视图的userInteractionEnabled属性设置为YES
  • 仔细检查您的视图是否未“隐藏”或透明度为0.0。
  • 确认父视图控制器的视图的exclusiveTouch属性不是YES

希望这有所帮助!


在我的Storyboard中将userInteractionEnabled设置为true就解决了问题。 - productioncoder

-1

我的解决方案:

- (void) displayContentController: (UIViewController*) content{
[content.view setFrame:recorderView.bounds];
UINavigationController *childNavController = [[UINavigationController alloc] initWithRootViewController:content];
childNavController.toolbarHidden = NO;
childNavController.view.frame = content.view.frame;
[self addChildViewController:childNavController];
[recorderView addSubview:childNavController.view];
[childNavController didMoveToParentViewController:self];
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接