2016-01-23 69 views
2

當我使用設備語言獨立更改應用程序的語言時,僅在重新啓動它時才起作用。我已經根據堆棧溢出的答案嘗試了幾次,例如:如何在iOS9中更改應用程序的語言而無需重新啓動應用程序?

#import "NSBundle+Language.h" 

#import <objc/runtime.h> 

static const char _bundle=0; 

@interface BundleEx : NSBundle 
@end 

@implementation BundleEx 
-(NSString*)localizedStringForKey:(NSString *)key value:(NSString *)value table:(NSString *)tableName 
{ 
    NSBundle* bundle=objc_getAssociatedObject(self, &_bundle); 
    return bundle ? [bundle localizedStringForKey:key value:value table:tableName] : [super localizedStringForKey:key value:value table:tableName]; 
} 
@end 

@implementation NSBundle (Language) 

+(void)setLanguage:(NSString*)language 
{ 
    static dispatch_once_t onceToken; 
    dispatch_once(&onceToken,^
        { 
         object_setClass([NSBundle mainBundle],[BundleEx class]); 
        }); 
    objc_setAssociatedObject([NSBundle mainBundle], &_bundle, language ? [NSBundle bundleWithPath:[[NSBundle mainBundle] pathForResource:language ofType:@"lproj"]] : nil, OBJC_ASSOCIATION_RETAIN_NONATOMIC); 

} 

@end 

但不生效。

當應用程序的設置屏幕中的語言發生變化時,我發佈了一個通知,那些聽取通知的人將重新加載視圖,但沒有工作,語言只是沒有改變。

+0

iOS不支持重新啓動應用程序功能。只要語言發生變化,您就可以隨時更新它。所有其他UI(需要更改語言的地方)應該在特定視圖的'viewWillAppear:'方法內更新。是的,**這個問題不是iOS9特有的。** – Hemang

回答

0

您的代碼在我的演示中工作,只需設置另一種語言,並執行類似於重新加載可見視圖的操作。

+0

是的,問題已經解決了,就像你說的那樣。 –

相關問題