在ios中重绘视图

时间:2012-10-30 08:53:45

标签: objective-c ios

是否可以重绘整个视图。

我需要它来完成我的语言设置。问题是语言只会在再次绘制的视图后发生变化。就像你没有设置然后再次进入,然后语言改变了。但是当你保存一切时,语言保持不变。

那么在发现语言变化后,我应该如何重绘我的观点,或者最好是整个应用程序?

3 个答案:

答案 0 :(得分:11)

在ARC:

- (void)setLanguage:(LanguageType)languageType
{
    _language = languageType;

    //TODO:your settings

    [_theWholeView setNeedsDisplay];
}

如果这不起作用,有一个非常麻烦的解决方案,它可以重新加载整个视图。

你可以像这样编码: 在view.h中,您需要创建一个委托。 @protocol WholeViewDelegate

- (void)reloadData;

@end

在view.m

- (void)setLanguage:(LanguageType)languageType
{
    _language = languageType;

    //TODO:your settings

    [_delegate reloadData];
}

在控制器中,您需要实现委托 在controller.m

- (void)reloadData
{
    if(_wholeView)
    {
        [_wholeView removeFromSuperview];
    }
    // in the wholeView init method you should refresh your data
    _wholeView = [[WholeView alloc] init];
    self.view addSubview:_wholeView
}

答案 1 :(得分:6)

是。致电[UIView setNeedsDisplay]reference)。

答案 2 :(得分:1)

只需调用setNeedsDisplay ..它将解决问题。 setNeedsDisplay实际上通过将视图的框架作为矩形参数传递来调用UIView类中的drawRect函数。希望有所帮助......