четверг, 1 октября 2015 г.

29 - UITableViewController, NSUserDefaults

В этом видеоуроке,  мы знакомимся с классом UITableViewController и NSUserDefaults для сохранения настроек.
В сторибоард создаем новый контроллер этого класса.
Старый контроллер удаляем. Так же создаем свой класс, наследник от  UITableViewController. 
Привязываем новый контроллер к новому классу.
Добавляем новые разделы и контролы в контроллер.
Создаем пробреди на контролы:

@property (weak, nonatomic) IBOutlet UITextField *loginField;
@property (weak, nonatomic) IBOutlet UITextField *passwordField;
@property (weak, nonatomic) IBOutlet UISegmentedControl *levelSegmentControl;
@property (weak, nonatomic) IBOutlet UISwitch *shadowSwitch;
@property (weak, nonatomic) IBOutlet UISegmentedControl *detalizationSegmentControl;
@property (weak, nonatomic) IBOutlet UISlider *soundSlider;

@property (weak, nonatomic) IBOutlet UISlider *musicSlider;

И добавляем обработчики изменений контролов:

- (IBAction)actionTextChange:(UITextField *)sender {
    [self saveSettings];
}

- (IBAction)actionValueChange:(id)sender {
        [self saveSettings];

}

Для того, чтобы клавиатура убиралась с экрана определяем метод делегата который вызывается если нажать Return на клавиатуре

- (BOOL)textFieldShouldReturn:(UITextField *)textField{
    if ([textField isEqual:self.loginField]) {
        [self.passwordField becomeFirstResponder];
    }
        else{
            [textField resignFirstResponder];
        }
    
    
    return YES;
    
}

Для сохранения настроек используется синглтон [NSUserDefaults standardUserDefaults]:

-(void) saveSettings {
    NSUserDefaults  *userDefaults=[NSUserDefaults standardUserDefaults];
    [userDefaults setObject:self.loginField.text forKey:kSettingsLogin];
    [userDefaults setObject:self.passwordField.text forKey:kSettingsPassword];
    [userDefaults setInteger:self.levelSegmentControl.selectedSegmentIndex forKey:kSettingsLevel];
    [userDefaults setBool:self.shadowSwitch.isOn forKey:kSettingsShadow];
    [userDefaults setInteger:self.detalizationSegmentControl.selectedSegmentIndex forKey:kSettingsDetalization];
    [userDefaults setFloat:self.soundSlider.value forKey:kSettingsSound];
    [userDefaults setFloat:self.musicSlider.value forKey:kSettingsMusic];
    [userDefaults synchronize];
    
}

Для загрузки настроек действуем наоборот:

-(void) loadSettings{
    NSUserDefaults  *userDefaults=[NSUserDefaults standardUserDefaults];

    self.loginField.text=[userDefaults objectForKey:kSettingsLogin];
    self.passwordField.text=[userDefaults objectForKey:kSettingsPassword];
    self.levelSegmentControl.selectedSegmentIndex=[userDefaults integerForKey:kSettingsLevel];
    self.shadowSwitch.on=[userDefaults boolForKey:kSettingsShadow];
    self.detalizationSegmentControl.selectedSegmentIndex= [userDefaults integerForKey:kSettingsDetalization];
    self.soundSlider.value=[userDefaults floatForKey:kSettingsSound];
    self.musicSlider.value=[userDefaults floatForKey:kSettingsMusic];
    
    
}

Так же в уроке рассмотрено как создавать слушателя нотификаций клавиатуры (когда клавиатура появляется и исчезает).

В функции viewDidLoad :
    NSNotificationCenter * nc=[NSNotificationCenter defaultCenter];
    [nc addObserver:self selector:@selector(notificationKeyboardWillShow:) name:UIKeyboardWillShowNotification object:nil];
    [nc addObserver:self selector:@selector(notificationKeyboardWillHide:) name:UIKeyboardWillHideNotification object:nil];

Сразу же удаляем (чтобы не забыть об этом) наблюдателя в методе dealloc:
- (void) dealloc{
    [[NSNotificationCenter defaultCenter] removeObserver:self];
}

Это функции выполняются при поступлении нотификации от клавиатуры:

-(void) notificationKeyboardWillShow: (NSNotification*) notification{
    NSLog(@"notificationKeyboardWillShow %@",notification.userInfo);
    
}
-(void) notificationKeyboardWillHide: (NSNotification*) notification{

        NSLog(@"notificationKeyboardWillHide %@",notification.userInfo);
}



Домашнее задание к уроку 29:

Ученик-Студент-Мастер-Супермен:

1. Сделайте задания из уроков 27 и 28 используя статические ячейки.
2. Добавьте возможность сохранять результат.
3. Добавьте новые секции и ячейки с прочим контролами (свичи, сегменты, слайдеры) чтобы проработать материал

Все задания выполнены.


Проект с домашним заданием к уроку 29 находится здесь





Комментариев нет:

Отправить комментарий