【问题标题】:access UISwitch setting from a different view?从不同的视图访问 UISwitch 设置?
【发布时间】:2011-01-21 05:13:13
【问题描述】:

k,我是新来的,所以很抱歉。

我正在尝试从不同的视图和类访问 UISwitch 值(打开或关闭),但无法使其工作。

这是一个简单的 2 视图应用程序。主视图,第二个是首选项菜单。

尝试编写一个 if/else 方法来在开关(在另一个视图上)打开而不是在其关闭时播放声音。

我似乎无法让它工作。任何想法或一些语法示例都会对我有所帮助。

谢谢。

【问题讨论】:

  • 展示您当前尝试的一些代码可能会有很大帮助。一般来说,从另一个视图控制器访问一个视图控制器的 UI 组件不是一种好的形式...

标签: iphone objective-c boolean uiswitch


【解决方案1】:

正如 Matt Wilding 所说,“从另一个视图控制器访问一个视图控制器的 UI 组件不是一种好的形式......”。

当用户更改开关状态时,您将状态保存到 NSUserDefaults 作为首选项值,而不是访问视图对象。您可以随时通过首选项访问开关状态值。

【讨论】:

  • 谢谢,我很感激。无论如何我都必须保存这些东西,这样可以简化事情。
【解决方案2】:

我将采用我认为您在此处尝试完成的工作,并提出一种替代方法。您希望在您的应用程序中有一个首选项(假设来自“首选项菜单”),允许用户设置您的应用程序是否播放背景音乐。 (可能不准确,这只是为了澄清)。

通常,在设计良好的应用中,流程由数据驱动,UI 反映数据模型的状态,控制器协调两层。您的建议是让您的应用程序根据 UI 的状态播放音乐,这不受任何数据模型的支持。这会切断模型级别,并且正如您所注意到的,可能会导致在不同控制器的 UI 之间进行通信以获取信息的尴尬尝试。

诸如应用程序首选项之类的内容通常存储在一个漂亮的 .plist 文件中,该文件通过 NSUserDefaults 类进行管理。这将是您偏好的数据级别跟踪的好地方。在这种情况下,UISwitch 将表示设置文件中标志的状态,更改开关的值将更改文件中的值。在您的应用程序中您需要知道是否设置了播放声音标志的任何其他地方,您引用数据模型信息而不是 UI。这将视图控制器彼此分离,这是一件好事。

【讨论】:

    【解决方案3】:

    为此,为 swith 添加选择器并在应用委托中设置 NSInteger 属性。如下所示

    [

    yourSwitch addTarget:self action:@selector(switched:) forControlEvents:UIControlEventValueChanged];
    
    -(IBAction) switched: (id)sender
    {
        int state=0;
        if(yourSwitch.on)
            state=1;
        else
                 state=0;
    
     objAppDelegate.switchState=state;
    }
    

    那么您需要在播放声音的第二个视图中访问此 appDelegate 属性 然后根据这个值,你可以做你想做的事情,并且为了制作 appDelegate 类的对象,你需要这一行

    YourAppDelegateClass *objAppDelegate=(YourAppDelegateClass *)[[UIApplication sharedApplication] delegate];
    

    好的,如果您有任何其他疑问,那么您可以问。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-08-24
      • 2010-11-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多