如何清除视图中的所有数据并重新加载?

Posted

技术标签:

【中文标题】如何清除视图中的所有数据并重新加载?【英文标题】:How can I clear all data in a view and reload it? 【发布时间】:2014-04-03 02:55:51 【问题描述】:

我有一个在单个视图上玩的游戏,当游戏结束时,我希望用户能够按下一个按钮(再次播放),这将完全重新加载视图(清除所有游戏数据并将视图刷新为如果它是第一次加载)。我试过了

[self.view setNeedsDisplay]

但是什么都没有发生。我必须手动清除数据还是有办法一次重置所有数据?

【问题讨论】:

【参考方案1】:

在这种情况下,我类似地做的是创建一个包含所有游戏子视图等的属性。

@property (nonatomic, strong) UIView *gameView;

然后在 viewDidLoad 中,我们调用第一次设置游戏视图的方法(稍后您会看到我们将再次使用相同的方法来重置游戏)

- (void)viewDidLoad

    [super viewDidLoad];

    [self setUpGame];


- (void)setUpGame

    // Your game views (subviews, buttons, etc.) set up here
    self.gameView = [[UIView alloc] initWithFrame:self.view.bounds];

然后,当用户点击再次播放按钮时,我们只需从超级视图中删除游戏视图,并调用我们讨论过的先前方法,重新设置游戏。您的按钮目标应设置为在下面调用此方法:[self playAgain];

- (void)playAgain

    [self.gameView removeFromSuperview];

    // This is the method we previously discussed above
    [self setUpGame];

此时您可以想出一些很酷且独特的动画,让它成为令人愉悦的游戏重置:)

【讨论】:

【参考方案2】:

setNeedsDisplay 只是表示您希望 ios 重新绘制屏幕,​​您很少需要手动调用。

我可能会实现类似@troop231 的东西,这是一种重置方法,但我不会重新分配任何按钮/视图等,因为这可能会很昂贵。在 MVC 模型中,您应该将数据(分数、生命值等)单独存储,并且您的视图应该只引用它们。因此,重置模型并假设您的视图知道模型更改,它们会相应地更新。

这样做的方法包括 KVO、NSNotification、Core Data 的 NSFetchedResultsController(可能是矫枉过正)、委托等。

【讨论】:

以上是关于如何清除视图中的所有数据并重新加载?的主要内容,如果未能解决你的问题,请参考以下文章

单击按钮后在视图中加载数据而不重新加载页面asp.net mvc中的所有数据

如何在编辑表格视图单元格中的文本字段时重新加载所有表格视图单元格 - iOS Swift

如何使用新数据重新加载或刷新选项卡栏控制器的选项卡栏中的数据?

调用popToViewController后如何清除视图中的文本框

使用 Ionic 框架在登录/注销时清除历史记录并重新加载页面

如何在重新加载时清除 UICollectionViewCell?