检查视图是否在运行时加载

17

有没有办法在不查看视图控制器的源代码(例如viewDidLoad,viewWillAppear等)的情况下查看视图是否已加载?

或者如何在运行时/动态地检查是否加载了任何视图以获取子视图。


我想等待视图加载完成,然后获取该视图的所有子视图,并使用类似KIF步骤和场景的方式开始对它们进行测试,通过这些UIView的属性和信息。但我不想仅仅使用可访问性标签,那么如何获取UIViews的属性呢? - ramo
“Loaded” 的意思是当我们可以获取视图的所有子视图时。我需要从另一个库文件中获取这些信息,而不是在项目源代码中获取。 - ramo
3个回答

48

如果您有一个视图控制器实例,可以询问它:

viewController.isViewLoaded

那么我应该在哪里检查这个 isViewLoaded 呢?首先会调用 applicationDidFinishLaunching,然后会调用第一个视图的 viewdidload。我应该在哪里检查 isViewLoaded 呢? - ramo

4

我不是非常清楚你所说的“loaded”是什么意思。基于你对“loaded”的定义,你可以采取以下措施之一:

  • 检查view是否为nil(最广泛的“loaded”定义,但这会依赖于在解除分配时将视图设为空值,否则可能会得到EXC_BAD_ACCESS)。

  • 检查[view superview]以查看视图是否有superview。

  • 检查[view window]以查看视图是否属于窗口(成为“在屏幕上”先决条件)。

  • 假设存在相应的UIViewController,则查询控制器的isViewLoaded属性,以查看它是否已将视图加载到内存中。这尤其有助于处理视图生命周期问题。

可能还有其他“loaded”的解释和其他可供检查的内容,但这些是我首先想到的。


0

我不太确定你的使用情况,但如果你只想查询视图层次结构,这可能会有所帮助。

- (UIView *)viewWithTag:(NSInteger)tag
  1. 给你感兴趣的所有视图打标签,例如:在感兴趣的某些视图上打上标签;“ImportantView1”,“ImportantView2”...

  2. 你需要一个(父)视图来调用上述API

  3. 该调用将查询(父)视图和所有子视图。

  4. 按自定义标签名称过滤视图。(如果标签以“ImportantView”开头)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接