在UIViewController中添加子控制器视图后,delegate与scrollView失效问题
问题原因与解决方案
嘿,这个问题我太熟了——你犯了iOS开发里一个很常见的新手错误:只把子控制器的view加到了父视图,但没把子控制器本身纳入父控制器的管理体系里!这就是menuVC的delegate和scrollView功能失效的核心原因,具体拆解下:
生命周期与内存管理双重失效:
当你只执行[self.view addSubview:muneVC.view]时,父视图只会持有muneVC的view对象,但muneVC这个控制器本身并没有被父控制器持有。在ARC环境下,muneVC会很快被系统释放,导致它的所有成员变量(包括scrollView、delegate引用)变成野指针,后续的delegate回调自然无处可去。同时,muneVC的生命周期方法(比如viewDidLoad、viewWillAppear)也可能不会被系统正确触发——如果你的scrollView配置、delegate绑定是在这些方法里,那功能自然无法生效。正确的子控制器集成方式:
要让子控制器的功能正常工作,必须把它添加为父控制器的子控制器,完整代码应该是这样的:
MuneScrollViewViewController *muneVC = [[MuneScrollViewViewController alloc] init]; muneVC.view.frame = CGRectMake(0, 0, self.view.frame.size.width, 30); // 关键步骤1:将子控制器添加到父控制器的子控制器列表中 [self addChildViewController:muneVC]; // 添加子视图到父视图层级 [self.view addSubview:muneVC.view]; // 关键步骤2:通知子控制器它已完成添加(iOS 9+之后可省略,系统会自动调用) [muneVC didMoveToParentViewController:self];
这样做之后,muneVC会被父控制器持有,它的生命周期会和父控制器同步,view也会被系统正确管理,scrollView的delegate回调和相关功能就能正常运行了。
内容的提问来源于stack exchange,提问作者PeppaP1g
相关产品推荐
相关产品推荐

