5

是否可以重绘整个视图。

我需要它来完成我的语言设置。问题是语言只有在再次绘制视图后才会改变。就像您退出设置然后再次进入,然后更改语言。但是,当您保存所有内容时,语言保持不变。

那么,在发现语言更改后,我应该如何重绘我的视图,或者最好是整个应用程序?

4

3 回答 3

11

在 ARC 中:

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

    //TODO:your settings

    [_theWholeView setNeedsDisplay];
}

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

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

- (void)reloadData;

@结尾

在视图中.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
}
于 2012-10-30T09:02:45.960 回答
6

是的。调用[UIView setNeedsDisplay]参考)。

于 2012-10-30T09:02:54.180 回答
1

只需调用 setNeedsDisplay.. 即可解决问题。setNeedsDisplay 实际调用 UIView 类中的 drawRect 函数,是通过将视图的边框作为矩形参数传入。希望有帮助....

于 2012-10-30T11:10:42.590 回答