通过ViewControllers传递数据

时间:2014-03-09 12:52:06

标签: ios objective-c uinavigationcontroller protocols

我正在开发一款支持多种语言的应用,我正在寻找设置不同语言的最佳方式。

该应用适用于UINavigationController。在第一个ViewController中,您可以选择按UIButton的语言,然后在以下视图控制器中,标签的文本将更改为相应的语言。

我现在正在这样做的方法是在创建新BOOL的实例时更改ViewController属性的值,具体取决于UIButton发件人标记。< / p>

FirstViewController.m

-(void)goToSecondVC{

    SecondViewController *secondVC = [[SecondViewController alloc]init];

    if ([sender tag] == 1) {
        secondVC.english = YES;
    }else{
        secondVC.english = NO;
    }


    [self.navigationController pushViewController:startScreenVC];

}

SecondViewController.m

-(void)viewWillAppear:(BOOL)animated{

    if(self.english){
        self.myLabel.text = @"This text will be in English";
    }else{
        self.myLabel.text = @"This text will be in Spanish";
}

我知道这可能不是实现这项任务的最佳方式。你会推荐什么,通知,授权,单身?我正在寻找一种可以从每个ViewController

编写和读取的全局变量

3 个答案:

答案 0 :(得分:1)

您应该使用本地化。

你可以得到这样的语言:
NSString *language = [[NSLocale currentLocale] objectForKey: NSLocaleLanguageCode];
看一下本教程的本地化: http://www.raywenderlich.com/2876/localization-tutorial-for-ios
this SO ansawer

答案 1 :(得分:0)

实施简单明了。

由于您希望每个视图控制器都知道此信息,因此更好的方法是使用KVO和商店作为语言信息值。

例如,将其保存到NSUserDefaults。然后,您可以从任何视图控制器访问它。

然后,如果某个视图控制器想要在此值发生更改时获得通知,则可以观察该值的NSUserDefaults对象。 (使用Storyboard,您可以使用共享用户默认控制器)。

答案 2 :(得分:0)

如果您想从应用中的任何位置访问当前语言设置,那么值得一看的是Singleton设计模式。 Here's an excellent summary

您也可以使用[NSUserDefaults standardUserDefaults]这是一个预定义的Singleton对象,或者只是创建自己的对象。