UIViewController 失去了对属性的跟踪

Posted

技术标签:

【中文标题】UIViewController 失去了对属性的跟踪【英文标题】:UIViewController loses track of property 【发布时间】:2016-05-06 07:07:10 【问题描述】:

在我的第一个具有属性的 ViewController 中

@property (nonatomic, strong) UIView* snapShotView;

我打电话给

self.snapShotView = [[UIScreen mainScreen] snapshotViewAfterScreenUpdates:YES];
[self.view addSubview: self.snapShotView];

然后我在它上面展示了两个视图控制器并再次关闭它们。当我回到第一个 viewController 时, snapShotView 属性为空,但视图仍然显示。我想删除 snapShotView,但我不再有参考。

如果我只在第一个 ViewController 上显示一个 ViewController 并关闭它,该属性仍然引用正确的视图。如果我在其上呈现并关闭另一个视图,则在关闭另外两个 ViewController 后,该属性为 null。

如何引用和删除 snapshoView?

【问题讨论】:

这段代码在哪里运行? self.snapShotView = [[UIScreen mainScreen] snapshotViewAfterScreenUpdates:YES];viewWillAppear? 点击后退按钮隐藏您的快照视图 代码在我创建之后和呈现第一个 ViewController 之前的方法中运行 【参考方案1】:

您丢失了对 subView 的引用真的很奇怪,但是无论如何,如果您丢失了对 subView 的引用并且因此如果您无法删除添加的 subView 并且这是您的问题,我会说你不需要从视图中删除子视图的引用:)

你可以这样做:)

[[self.view subviews] makeObjectsPerformSelector:@selector(removeFromSuperview)];

此语句将从您的视图中删除所有子视图,而不参考 :)

如果您在视图中添加了多个视图并且只想删除特定视图,请使用标签:)

self.snapShotView = [[UIScreen mainScreen] snapshotViewAfterScreenUpdates:YES];
self.snapShotView.tag = someValue;
[self.view addSubview: self.snapShotView];

同时删除

for (UIView *view in [self.view subviews]) 
     if (view.tag == someValue) 
          [view removeFromSuperview];
     

【讨论】:

谢谢。像魅力一样工作。

以上是关于UIViewController 失去了对属性的跟踪的主要内容,如果未能解决你的问题,请参考以下文章

为啥我的 NSManagedObjects 数组失去了它的属性?

将绑定传递给类型属性包装器的变量 - 失去基础类型

Android键盘在Page Renderer中失去了对触摸的关注

为什么这个文本域失去了对morphdom的关注?

反应输入文本失去对重新渲染的关注

在使用 keyPressEvent 子类化 QTableView 后,我失去了对箭头键的使用。如何在保持自定义信号的同时轻松使用它们进行导航?