今天犯了一个低级的错误,我新建了一个控制器A ,又新建了控制器B,然后直接把控制器B的view添加在了控制器A的view上
[self.view addSubview:[[控制器B alloc]init].view];
事件传递机制:根据main函数的参数加载UIApplication->AppDelegate->UIWindow->UIViewController->superView->subViews
关系为:UIApplication.keyWindow.rootViewController.view.subView。
响应者链条:http://www.mamicode.com/info-detail-69668.html
所以在开始我把控制器B添加在控制器A上面的时候,我点击UIButton,此时的事件响应是这样的:
UIApplication->AppDelegate->UIWindow 在这里时我们要注意到我开始的添加方式是没有直接添加过这个控制器的,所以导致向下找不到合适的对象,这里也可以直接理解为UIButton->控制器Bview->控制器B,而这里的控制器B不属于UIWindow的,所以导致响应者链条断了
而我单独将控制器BView提出来继承UIView添加进控制器A点击事件是这样的:
UIButton->控制器A 这里我在UIWindow 添加时就是
self.window.rootViewController = [[LZYNavigationController alloc]initWithRootViewController:[[控制器A alloc]init]];所以这里向上传递是成功的。点击触发方法。
上面的其实没什么看点,记住这个敲码姿势就行了:先添加为子控制器,能让UIWindow向下传递时找到合适的对象,或是向上找到合适的响应者
LZYHomeBottomController *bottomVc = [[LZYHomeBottomController alloc]init];
[self addChildViewController:bottomVc];
[self.view insertSubview:bottomVc.view atIndex:0];
本文介绍了在iOS开发中,将控制器B的视图添加到控制器A上后,控制器B的点击事件失效的问题。通过分析事件传递机制和响应者链条,揭示了由于B控制器不在UIWindow的响应者路径中导致事件无法正常响应。解决方案是确保正确插入子控制器,使事件能正确传递给相应对象。

1770

被折叠的 条评论
为什么被折叠?



