iOS - childViewController没有接收事件

时间:2013-07-08 17:44:44

标签: ios viewcontroller uiresponder uievent childviewcontroller

最新更新:我创建了一个全新的项目,其构建方式与下面完全相同。但是,这个测试项目实际上工作得很好,即使它看起来是一样的...我注意到的一件事是,在单击子视图时,损坏版本中的父视图控制器正在接收-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event controller的视图...在工作版本中,子视图控制器按原样接收事件......就像父视图阻塞了子视图一样......?

进度更新:稍微拧了一下后,我发现直接将帧分配给子视图控制器时它可以正常工作。但是,我必须使用autolayout创建我的项目,这就是我所做的。出于某种原因,autolayout导致子视图控制器的视图无响应...

目前我有一个只有1个childviewcontroller的viewcontroller。 childviewcontroller的视图显示得很好但我根本无法与childViewController进行交互。 childViewController有几个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];
}

感谢帮助新手! :)

3 个答案:

答案 0 :(得分:3)

实际问题出在我的GoalDetailsPageViewController中。问题实际上是由于尝试在uiscrollview中使用autolayout而引起的......这是一件棘手的事情。无论如何,我发布的原始代码很好,谢谢。

答案 1 :(得分:2)

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

  • 确保按钮的userInteractionEnabled属性和子ViewController的视图设置为YES
  • 仔细检查您的视图是否为“隐藏”,且alpha值为0.0。
  • 确认您的部分ViewController视图的exclusiveTouch 设置为YES

希望这有帮助!

答案 2 :(得分:0)

我的解决方案:

- (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];
}