Как сохранить состояние переключателя в приложении - PullRequest
1 голос
/ 21 мая 2011

Я работал с переключателем управления, его значение по умолчанию устанавливается на «выкл» при каждом переходе со страницы или перезапуске приложения. Как это сделать так, чтобы при нажатии на него он оставался включенным или, если он был нажат, оставался выключенным, пока мы не изменим вручную?

Вот мой код, где я размещаю и устанавливаю ffram для scrollview

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"Cell new";
     listData =[self.tableContents objectForKey:[self.sortedgroups objectAtIndex:[indexPath section]]];


    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]autorelease];

    }
    NSUInteger row = [indexPath row];
    cell.textLabel.text = [listData objectAtIndex:row];


    if(indexPath.section==0)
    {  
        switch (indexPath.row) 
        {
            case 0:
            {
                switcher = [[[UISwitch alloc] initWithFrame:CGRectZero] autorelease];
                [switcher addTarget:self action:@selector(switchAction:)
                   forControlEvents:UIControlEventValueChanged];
                cell.accessoryView = switcher;
                switcher.tag = indexPath.row;


                //cell.textLabel.text=@"switcher";

            } 
                break;
            case 1: 
            {


                slide = [[[UISlider alloc] initWithFrame:CGRectMake(0,0, 150, 15)] autorelease];
                [slide addTarget:self action:@selector(slideact:)
                forControlEvents:UIControlEventValueChanged];
                cell.accessoryView = slide;
                // slide.tag = indexPath.row;                
            } 
                break;

}
}
}

Это мой метод действия переключателя:

- (void)switchAction:(UISwitch*)sender
{
    NSLog(@"switchAction: sender = %d, isOn %d", [sender tag], [sender isOn]);

    if(sender.on)
    {

[[NSUserDefaults standardUserDefaults]setObject:@"on" forKey:@"switcher"];
        [[NSUserDefaults standardUserDefaults]synchronize];

    }
    else
    {
[[NSUserDefaults standardUserDefaults]setObject:@"off" forKey:@"switcher"];
        [[NSUserDefaults standardUserDefaults]synchronize];

    }
}

-(void)viewWillAppear:(BOOL)animated
{
if ([[[NSUserDefaults standardUserDefaults]valueForKey:@"switcher"]isEqualToString:@"on"])
 {

switcher.on=YES;

    }
else
{
switcher.on=NO;
}

}

Ответы [ 3 ]

2 голосов
/ 21 мая 2011

Ну, тогда вам нужно сохранить состояние переключателя.Для этого вы даже можете использовать базу данных или NSUserDefaults.Использование NSUserDefaults было бы намного лучше.

- (void)switchAction:(UISwitch*)sender
{
    DEBUGLOG(NSLog(@"switchAction: sender = %d, isOn %d", [sender tag], [sender isOn]));

    if(sender.on)
    {

[[NSUserDefaults standardUserDefaults]setObject:@"on" forKey:@"switch"];
        [[NSUserDefaults standardUserDefaults]synchronize];

    }
    else
    {
[[NSUserDefaults standardUserDefaults]setObject:@"off" forKey:@"switch"];
        [[NSUserDefaults standardUserDefaults]synchronize];

    }
}

Затем в вашем методе viewwillAppear сделайте следующее

-(void)viewWillAppear:(BOOL)animated
{
if ([[[NSUserDefaults standardUserDefaults]valueForKey:@"switch"]isEqualToString:@"on"]) {

switch.Ison=YES;

    }
else
{
switch.Ison=NO;
}
}
0 голосов
/ 21 мая 2011

Вы просто используете метод для включения и выключения, как это

- (void)switchAction:(UISwitch*)sender
{
    DEBUGLOG(NSLog(@"switchAction: sender = %d, isOn %d", [sender tag], [sender isOn]));

    if(sender.on)
    {

    }
    else
    {

    }
}

И если вы хотите установить его по умолчанию, вам просто нужно установить его в своем приложении, скажем, в файле реализации в viewwillappear или в верхней части вашего файла после внедрения как

switch.on=YES;
0 голосов
/ 21 мая 2011

У вас должно быть значение для сохранения статуса управления переключателем, возможно, по предпочтениям пользователя.При переходе к этому представлению вы должны проверить это значение.

Boolean status=YES;   // You should read this value from User Preference for example it represent the last status set to the switch control.
[switchView setOn:status animated:NO];

См. Следующий вопрос для чтения и записи в пользовательских настройках: настройки чтения и сохранения iphone

...