为啥我的 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] 的 UIActivityIndicatorView 子视图 [1] 是带有标签 [32] 的 UILabel
编辑#2:
这个问题似乎不会出现在 iPhone 上,只是 iPad 上。我检查了我执行if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
的所有地方,但这些逻辑似乎都没有任何后果。
【问题讨论】:
你是如何关闭模态视图控制器的?你是如何显示模态视图控制器的?在这里显示一些代码可能会有所帮助。 【参考方案1】:我不会以这种方式解雇;我会改用委托模式:当BrowsingViewController
想要关闭时,它会调用类似[delegate browsingViewControllerDidFinish:self];
的东西。这是关闭视图控制器的“通常”方式,它还消除了BrowsingViewController
始终由其父视图控制器以模态方式呈现的要求。
BrowsingViewController
和BrowsingViewController-iPad
xib 之间有什么区别?
我会检查“父”视图控制器,逐步检查其view
和所有子视图,以查看是否有任何覆盖(如您所说)在整个视图层次结构之上阻止触摸事件的东西。
【讨论】:
xib 之间的差异可以忽略不计。事实上,我在 iPad 上使用 iPhone 特定版本对其进行了测试,仍然能够重现该问题。该问题已在检查视图层次结构时更新。 发现问题。它可以追溯到我如何解除模态视图。我的 viewDidAppear 方法正在检查模态视图,如果它存在,让它显示另一个“堆叠”模态。问题是,这是在前一个被解雇后被调用的。为什么这没有在 iPhone 上表现出来,我无法理解,但我为糟糕的编程感到羞耻!以上是关于为啥我的 UIView 在重新加载后没有响应?的主要内容,如果未能解决你的问题,请参考以下文章
Flutter:为啥我的构建器在 Web 服务调用后没有重新加载?
为啥我的 SharedPreferences 在应用程序启动后没有立即加载?
从 iOS 中的 UIView 子视图重新加载时 UITableView 未重新加载