2012-10-30 49 views
5

是否可以重繪整個視圖。在ios中重繪視圖

我需要它來完成我的語言設置。問題在於語言只有在再次繪製視圖後纔會改變。就像你退出設置然後再次進入,那麼語言就會改變。但是,當你保存所有內容時,語言保持不變。

那麼我應該如何重新繪製我的視圖,或通過最好的整個應用程序,發現語言改變後?

+1

in your viewController [self.view setNeedsDisplay:YES]; –

+0

只是好奇 - 爲什麼你不使用iOS的標準「自動」語言選擇?就個人而言,我認爲iOS應用程序中的語言選擇是一種痛苦,通常是「我不在乎」編程風格的明確標誌。 – Eiko

+0

什麼是標準的「自動」語言選擇。我已經根據互聯網上的一個例子實施了我的語言選擇。 – Datenshi

回答

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 
} 
+0

仍然無法完成。工作原理相同.. :(我使用[tableview reloadData]設法得到它不完整,但不會更新我動態創建的表格..嗯,你如何選擇整個應用程序視圖?self.view似乎不去工作 – Datenshi

+0

@Dennshi我已經更新了我的答案,你可以看看 – cloosen

6

是的。致電[UIView setNeedsDisplay]reference)。

+0

如果你有更改掛起,並想告訴視圖重繪,我認爲這是你所需要的。爲我工作,謝謝! – SimplGy

1

只需調用setNeedsDisplay ..它將解決問題。 setNeedsDisplay實際上通過傳遞視圖的框架作爲矩形參數來調用UIView類中的drawRect函數。希望有所幫助....

+1

對不起,這doesn如果你試圖重命名一個按鈕或標籤,你可以直接將其文本或標題改爲另一個字符串,但它不會重繪使用此方法的單元格的標題 – Datenshi

+0

。對於標籤,我們有'myLabel.text = @' Mytext「; – m4n1c

+0

是的我也知道這一點,我試圖更新tableview,它存儲在Mutablearray中的值,我需要我的數組獲取新值,而不需要重複初始化它們,數組中的對象是LocalizedStri ngs,所以用戶可以更改用於tableview的本地化字符串。 – Datenshi