【问题标题】:Passing data through ViewControllers通过 ViewController 传递数据
【发布时间】:2014-03-09 12:52:06
【问题描述】:

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

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

我现在的做法是在根据UIButton 发件人标签创建新ViewController 的实例时更改BOOL 属性的值。

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 读写的全局变量

【问题讨论】:

    标签: ios objective-c uinavigationcontroller protocols


    【解决方案1】:

    您应该为此使用本地化。

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

    【讨论】:

    • 使用本地化是唯一明智的答案。我还推荐 iTunes U 上的 cs193p 课程。最新版本有关于本地化的讲座。
    • 我希望用户能够在不考虑本地化的情况下更改应用的语言。
    • 您仍应使用本地化。看看this还没看完,不过他好像在做你想做的事。
    • 谢谢,我会更深入地了解您的解决方案,但目前我将实施 NSUserDefaults 方法,因为它对我有用。
    【解决方案2】:

    实现简单而正确。

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

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

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-03-21
        相关资源
        最近更新 更多