【问题标题】:UIViewController loses track of propertyUIViewController 失去了对属性的跟踪
【发布时间】: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 之前的方法中运行

标签: ios objective-c iphone uiviewcontroller snapshot


【解决方案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];
     }
}

【讨论】:

  • 谢谢。像魅力一样工作。
猜你喜欢
  • 1970-01-01
  • 2015-05-07
  • 2021-09-01
  • 1970-01-01
  • 2022-09-14
  • 1970-01-01
  • 2021-04-12
  • 2012-05-30
  • 1970-01-01
相关资源
最近更新 更多