我有一个viewController,用UIWebView弹出一个模态视图。如果我访问一个特别繁重的页面,我开始收到内存警告,然后父视图被卸载。这一切都很好,但是当我关闭模态视图时,我的父级重新加载(按预期)但不再能够处理任何触摸事件。该应用程序正确响应方向更改,但没有任何触摸更改任何内容。按钮不起作用,UIWebView不响应滚动(但加载默认网站)等。就好像透明的UIView覆盖整个窗口。有什么想法可能会发生吗?
以下是我展示模态窗口的方法:
BrowsingViewController* controller = [[BrowsingViewController alloc]
initWithNibName:UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad ?
@"BrowsingViewController-iPad" : @"BrowsingViewController"
bundle:nil initialURL:[[request URL] absoluteString]];
[self presentModalViewController:controller animated:YES];
[controller release];
以下是我如何解雇它(从模态视图本身):
- (void) onCloseTouch
{
[self.parentViewController dismissModalViewControllerAnimated:YES];
}
修改
通过视图层次结构,我没有注意到任何超出常规的内容。这是我的主视图控制器的日志语句。在我显示模态视图之前和之后它们是相同的:
viewWillAppear called. =============== parentViewController subviews count=2 View [0] is a UINavigationTransitionView subview count=0 View [1] is a UINavigationBar subview count=2 subview [0] is a UINavigationItemView subview [1] is a UINavigationButton =============== self views subviews count=3 View [0] is a UIWebView with tag [1] subview count=1 subview [0] is a UIScrollView with tag [0] View [1] is a UIToolbar with tag [2] subview count=3 subview [0] is a UIToolbarTextButton with tag [0] subview [1] is a UIToolbarButton with tag [0] subview [2] is a UIToolbarButton with tag [0] View [2] is a UIView with tag [3] subview count=2 subview [0] is a UIActivityIndicatorView with tag [31] subview [1] is a UILabel with tag [32]
编辑#2:
这个问题似乎不会出现在iPhone上,只有iPad上。我已经检查了我正在执行if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
的所有地方,并且这些逻辑似乎没有任何后果。
答案 0 :(得分:1)
我不会以这种方式解雇;我会使用委托模式:当BrowsingViewController
想要关闭时,它会调用类似[delegate browsingViewControllerDidFinish:self];
的内容。这是解除视图控制器的“常用”方式,它还消除了BrowsingViewController
总是由其父视图控制器以模态方式呈现的要求。
BrowsingViewController
和BrowsingViewController-iPad
xibs之间有什么区别?
我会在“父”视图控制器中进行一些检查,逐步浏览其view
和所有子视图,以查看是否在覆盖触摸事件的整个视图层次结构上覆盖了(如您所说)的任何内容。