从不同的视图访问UISwitch设置?

时间:2011-01-21 05:13:14

标签: iphone objective-c boolean uiswitch

k,我是新手,所以一般都是道歉。

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

这是一款简单的2视图应用。主视图和第二个是偏好菜单。

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

我似乎无法使其发挥作用。任何想法或一些语法示例都会对我有所帮助。

感谢。

3 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分:1)

我将采取我认为你在这里想要完成的事情并建议另一种方法。您希望在您的应用程序中具有首选项(假设为“首选项菜单”),允许用户设置诸如您的应用程序是否播放背景音乐之类的内容。 (可能不准确,这只是为了澄清)。

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

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

答案 2 :(得分:0)

为此目的,在app delegate中为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];

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