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中失去了对触摸的关注
在使用 keyPressEvent 子类化 QTableView 后,我失去了对箭头键的使用。如何在保持自定义信号的同时轻松使用它们进行导航?