为什么我的UIView在重新加载后没有响应?

时间:2010-09-04 00:26:41

标签: iphone objective-c

我有一个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)的所有地方,并且这些逻辑似乎没有任何后果。

1 个答案:

答案 0 :(得分:1)

我不会以这种方式解雇;我会使用委托模式:当BrowsingViewController想要关闭时,它会调用类似[delegate browsingViewControllerDidFinish:self];的内容。这是解除视图控制器的“常用”方式,它还消除了BrowsingViewController总是由其父视图控制器以模态方式呈现的要求。

BrowsingViewControllerBrowsingViewController-iPad xibs之间有什么区别?

我会在“父”视图控制器中进行一些检查,逐步浏览其view和所有子视图,以查看是否在覆盖触摸事件的整个视图层次结构上覆盖了(如您所说)的任何内容。