gpt4 book ai didi

iphone - viewWillDisappear 和 viewDidDisappear 永远不会被调用

转载 作者:可可西里 更新时间:2023-11-01 05:07:06 26 4
gpt4 key购买 nike

我为 PopoverController 创建了自己的类(没有子类化 UIPopoverController)以我想要的方式呈现 ViewController。

CustomPopoverController 不是 UIViewController,而是有一个名为“contentViewController”的 ivar,它是将实际显示的 VC。

我实现了自己的“dismissPopoverAnimated:”,以便在用户点击 contentViewController 框架之外的任何地方时关闭我的自定义弹出窗口:

-(void) dismissPopoverAnimated : (BOOL) animated
{
// dismissalView is the view that intercept the taps outside.
[self.dismissalView removeFromSuperview];
self.dismissalView = nil;
if (animated)
{
CGRect newFrame = self.view.frame;
// When in landscape Mode the width of the screen is actually the "height"
newFrame.origin.y = [UIScreen mainScreen].bounds.size.width;

[UIView animateWithDuration:0.5
animations:^{self.view.frame = newFrame;}
completion: ^(BOOL finished) {if(finished) [self.contentViewController.view removeFromSuperview];}];
}
else
{
[self.contentViewController.view removeFromSuperview];
}
isPresented = NO;
[self.delegate customPopoverDidDismissPopover:self];
}

问题是,即使 removeFromSuperView 在任何情况下都被调用 - 动画与否,contentViewController 永远不会收到 viewWillDisappearviewDidDisappear 甚至 viewDidUnload 当我释放 contentViewController 时;

有人知道为什么吗?或者甚至更好地了解 viewWill.../viewDid... 方法的链以及它们应该何时被调用。

最佳答案

当您通过 UIView 的方法添加 subview 或删除 subview 时,它永远不会导致拥有的 UIViewController 调用 viewWillAppear, viewDidAppear, viewWillDisappearviewDidDisapper。仅那些由 UINavigationController 方法管理的 viewController,如 pushViewController:animated:popViewControllerAnimated:,或 presentModelViewController:aniamted: ...等。他们将通知 Controller View 的状态正在更改。

关于iphone - viewWillDisappear 和 viewDidDisappear 永远不会被调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5894576/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com