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

Posted

技术标签:

【中文标题】为啥我的 UIView 在重新加载后没有响应?【英文标题】:Why is my UIView unresponsive after a reload?为什么我的 UIView 在重新加载后没有响应? 【发布时间】:2010-09-04 00:26:41 【问题描述】:

我有一个 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 被调用。
=============== parentViewController 子视图数=2
View [0] 是一个 UINavigationTransitionView
子视图计数=0
View [1] 是一个 UINavigationBar
子视图计数=2
      子视图 [0] 是一个 UINavigationItemView
      子视图 [1] 是一个 UINavigationButton
=============== 自己的视图子视图数=3
View [0] 是带有标签 [1] 的 UIWebView
子视图计数=1
      subview [0] 是带有标签 [0] 的 UIScrollView
View [1] 是一个带有标签 [2] 的 UIToolbar
子视图计数=3
      子视图 [0] 是带有标签 [0] 的 UIToolbarTextButton
      子视图 [1] 是带有标签 [0] 的 UIToolbarButton
      子视图 [2] 是带有标签 [0] 的 UIToolbarButton
View [2] 是一个带有标签 [3] 的 UIView
子视图计数=2
      子视图 [0] 是带有标签 [31] 的 UIActivityIndi​​catorView
      子视图 [1] 是带有标签 [32] 的 UILabel

编辑#2: 这个问题似乎不会出现在 iPhone 上,只是 iPad 上。我检查了我执行if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) 的所有地方,但这些逻辑似乎都没有任何后果。

【问题讨论】:

你是如何关闭模态视图控制器的?你是如何显示模态视图控制器的?在这里显示一些代码可能会有所帮助。 【参考方案1】:

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

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

我会检查“父”视图控制器,逐步检查其view 和所有子视图,以查看是否有任何覆盖(如您所说)在整个视图层次结构之上阻止触摸事件的东西。

【讨论】:

xib 之间的差异可以忽略不计。事实上,我在 iPad 上使用 iPhone 特定版本对其进行了测试,仍然能够重现该问题。该问题已在检查视图层次结构时更新。 发现问题。它可以追溯到我如何解除模态视图。我的 viewDidAppear 方法正在检查模态视图,如果它存在,让它显示另一个“堆叠”模态。问题是,这是在前一个被解雇后被调用的。为什么这没有在 iPhone 上表现出来,我无法理解,但我为糟糕的编程感到羞耻!

以上是关于为啥我的 UIView 在重新加载后没有响应?的主要内容,如果未能解决你的问题,请参考以下文章

Flutter:为啥我的构建器在 Web 服务调用后没有重新加载?

在uiview中加载xib但没有响应

为啥我的 SharedPreferences 在应用程序启动后没有立即加载?

从 iOS 中的 UIView 子视图重新加载时 UITableView 未重新加载

为啥使用 Docker 容器的 NextJS 在更改开发环境的代码后没有重新加载?

为啥重新加载我的页面后浏览器会再次获取图像?