17

有什么方法可以让我在不检查视图控制器的源代码的情况下看到加载的视图(例如,viewDidLoad、viewWillAppear 等)

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

4

3 回答 3

47

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

viewController.isViewLoaded
于 2012-04-04T00:03:39.250 回答
4

我不完全清楚您所说的“加载”是什么意思。根据您对“已加载”的定义,您可以:

  • 检查视图是否是nil(加载的最广泛定义,尽管这将取决于在释放视图时是否有人取消视图,以免您得到 EXC_BAD_ACCESS)。

  • 检查[view superview]视图是否有超级视图。

  • 检查[view window]视图是否是窗口的一部分(“在屏幕上”的先决条件)

  • 假设有一个对应的 UIViewController,查询控制器的isViewLoaded属性,看它是否已经将视图加载到内存中。这特别有助于查看生命周期问题。

可能还有其他对“已加载”的解释以及您可以检查的其他内容,但这些是我最先想到的。

于 2012-04-03T23:44:43.353 回答
0

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

- (UIView *)viewWithTag:(NSInteger)tag
  1. 标记您感兴趣的所有视图,例如。标记某些感兴趣的观点;“ImportantView1”、“ImportantView2”、...

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

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

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

于 2012-04-03T23:52:08.623 回答