Lier son application aux paramètres

Le post d’aujourd’hui va s’attarder sur une fonctionnalité peu connu introduite avec iOS 8 : les liens entre les paramètres et l’application. iOS offre une manière très élégante de gérer les paramètres de l’application par le biais des NSUserDefaults, et du panel de configuration. Cependant, pour accéder à ce panel de configuration, vous deviez soit intégrer une interface que vous aviez créer vous même au sein de votre application, ou laisser l’utilisateur naviguer dans les réglages de son appareil pour faire ses modifications.


L’application qui va accompagner ce tutoriel va être très simple : une application avec une vue qui contiens un bouton qui le lie aux réglages. Il n’y aura qu’un seul paramètre dans les réglages qui représente le titre le l’application. Vous pouvez récupérer les source sur github.
LinkMe Screenshot

L’example définit un label qui représente le titre, dont le texte est définit dans les réglages de l’application :

private func updateTitle() {
  let userDefaults = NSUserDefaults.standardUserDefaults()

  titleLabel.text = userDefaults.stringForKey("fr.swift-tuto.settings.title")
}

Afin de pouvoir mettre à jour cette propriété nous avons créer un « settings bundle » qui contient juste cette propriété :

Xcode ios settings bundle
Depuis iOS 8 il y a une nouvelle constante qui a fait sont apparition.

UIApplicationOpenSettingsURLString est une URL qui permet d’ouvrir les réglages depuis l’application. Voici comment ouvrir les réglages quand le bouton est touché :

@IBAction func openSettingsAction(sender: AnyObject) {
  if let settingsUrl = NSURL(string: UIApplicationOpenSettingsURLString) {
    UIApplication.sharedApplication().openURL(settingsUrl)
  }
}

iOS settingsMaintenant vous pouvez changer le titre de l’application et depuis iOS 9 revenir directement dans l’application en cliquant en haut à gauche.

Du coté de l’application il faut maintenant mettre à jour le titre. Heureusement pour cela il y a la notification NSUserDefaultsDidChangeNotification. Il nous reste plus qu’a l’écouter :

override func viewDidLoad() {
  super.viewDidLoad()

  NSNotificationCenter.defaultCenter().addObserver(self, selector: "updateTitle",
      name: NSUserDefaultsDidChangeNotification, object: nil)

  updateTitle()
}

Il ne faut pas oublier qu’avec le NSNotificationCenter il faut absolument se désabonner :

deinit {
  NSNotificationCenter.defaultCenter().removeObserver(self)
}

Maintenant dès que l’utilisateur va mettre à jour les réglages l’application va répondre en conséquence !

Conclusion

Si vous utilisez déjà les « settings bundle » cette astuce peut faciliter la vie de vos utilisateurs. Si vous avez décidé d’implémenter vos propres interfaces de configuration parce qu’il est difficile d’aller dans les réglages il est peut être temps de changer d’avis.

Comme mentionné au début du tutoriel, vous pouvez trouver le code ici.

1 Etoile2 Etoiles3 Etoiles4 Etoiles5 Etoiles (1 votes, average: 5,00 out of 5)
Loading...

Aucun commentaire

Time limit is exhausted. Please reload CAPTCHA.

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.