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

时间:2014-04-03 02:55:51

标签: ios view

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

[self.view setNeedsDisplay]
然而,没有任何事情发生。我是否必须手动清除数据,或者是否有办法立即重置所有内容?

2 个答案:

答案 0 :(得分:0)

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

@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];
}

这取决于你想到一些很酷的独特动画,让它在这一点上令人愉悦地重置游戏:)

答案 1 :(得分:0)

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

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

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