получить доступ к настройке UISwitch из другого представления? - PullRequest
1 голос
/ 21 января 2011

k, я новичок в этом, поэтому извиняюсь всем вокруг.

Я пытаюсь получить доступ к значению UISwitch (включено или выключено) из другого представления и класса и не могу заставить его работать.

Это простое приложение для 2 видов. Главный вид, а второй - меню настроек.

пытается написать метод if / else для воспроизведения звука, когда переключатель (на другом экране) включен, а не когда он выключен.

Не могу заставить его работать. Любые мысли или примеры синтаксиса действительно помогут мне.

Спасибо.

Ответы [ 3 ]

4 голосов
/ 21 января 2011

Как сказал Мэтт Уилдинг, «нехорошо получать доступ к компонентам пользовательского интерфейса одного контроллера представления из другого ...».

Вместо доступа к объекту представления, когда состояние переключателя изменяется пользователем, вы сохраняете состояние в NSUserDefaults в качестве значения предпочтения. В любое время вы можете получить доступ к значению состояния коммутатора через настройки.

1 голос
/ 21 января 2011

Я собираюсь взять то, что, как вы думаете, вы пытаетесь достичь здесь, и предложить альтернативный подход. Вы хотите, чтобы в вашем приложении были настройки (предполагаемые из «меню настроек»), позволяющие пользователю устанавливать что-то вроде того, будет ли ваше приложение воспроизводить фоновую музыку. (Может быть не совсем точно, это только для пояснения).

Как правило, в хорошо спроектированном приложении поток управляется данными, причем пользовательский интерфейс отражает состояние модели данных, а контроллеры координируют два уровня. Что вы предлагаете, так это чтобы ваше приложение воспроизводило музыку в зависимости от состояния пользовательского интерфейса, который не поддерживается какой-либо моделью данных. Это исключает уровень модели и, как вы заметили, может привести к неловким попыткам обмена информацией между пользовательским интерфейсом различных контроллеров.

Такие вещи, как настройки приложения, обычно хранятся в изящном файле .plist, который управляется с помощью класса NSUserDefaults. Это было бы отличным местом для отслеживания уровня данных ваших предпочтений. В этой ситуации UISwitch будет представлять состояние флага в файле настроек, а изменение значения переключателя изменит значение в файле. В любом другом месте вашего приложения, где вам нужно знать, установлен ли флаг воспроизведения звука, вы ссылаетесь на информацию о модели данных, а не на пользовательский интерфейс. Это отделяет контроллеры представления друг от друга, что хорошо.

0 голосов
/ 21 января 2011

Для этой цели добавьте селектор для 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];

хорошо, если у вас есть какие-либо другие сомнения, тогда вы можете спросить.

...