【问题标题】:iOS - childViewController not receiving eventsiOS - childViewController 没有收到事件
【发布时间】:2013-07-08 17:44:43
【问题描述】:

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

进度更新:经过一番折腾,我发现直接将框架分配给子视图控制器时效果很好。但是,我必须使用自动布局创建我的项目,这就是我所做的。出于某种原因,自动布局导致子视图控制器的视图无响应...

目前我有一个只有 1 个子视图控制器的视图控制器。 childviewcontroller 的视图显示得很好,但我根本无法与 childViewController 交互。 childViewController 有几个 UIButton,但它们不响应点击。

我尝试在父视图控制器和子视图控制器中对此进行测试。

(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
  • 不确定您所说的定义是什么意思,抱歉。 @property GoalDetailsPageViewController *detailPageVC; ^这是你要找的吗?
  • 是的,这是完整的行吗?
  • 是的,这是我的 GoalPageViewController 头文件中的完整行。
  • 感谢您使用 'touchesBegan:withEvent:' 来检测哪个视图控制器检测到该事件。

标签: ios viewcontroller uiresponder uievent childviewcontroller


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

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

    希望这会有所帮助!

    【讨论】:

    • 在我的故事板中将 userInteractionEnabled 设置为 true 就可以了。
    【解决方案3】:

    我的解决方案:

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

    【讨论】:

      猜你喜欢
      • 2016-07-30
      • 1970-01-01
      • 2021-06-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多