Click-Through Disabler
Par défaut, les contrôles de Cocoa acceptent les clics quand leur fenêtre n’est pas au premier plan. C’est ce qu’on appelle le « clic au travers », ou « click-through » en anglais. Cependant, le guide de l’interface humaine de Mac OS X recommande que les contrôles causant des action destructives ou difficiles à annuler soit désactivés quand la fenêtre n’est pas au premier plan, ceci pour éviter les clics accidentels.
Un object MFClickThroughDisabler
s’occupe de désactiver ou d’activer un contrôle en fonction de l’état de la fenêtre dans laquelle il est placé. Ceci a pour effet de rendre le contrôle non-cliquable quand la fenêtre n’est pas la active.
Fichier
MFClickThroughDisabler.h
MFClickThroughDisabler.m
Utilisation
Copiés à partir du guide, voici les cas où vous devirez déactiver le clic au travers (traduction libre) :
Ne permettez pas le clic au travers pour les action qui :
- sont potentiellement dangeureuses (par exemple, le bouton Effacer dans Mail)
- sont difficiles à revenir en arrière, comme
- les actions qui sont difficiles ou impossibles à annuler (le bouton Envoyer de Mail)
- quitter un dialogue sans savoir quelle action a été prise (par exemple, ce n’est pas facile de dé-enregistrer un document)
- enlèvent l’utilisateur du contexte courant (sélectionner un nouvel élément dans une colonne, par exemple, peut changer la cible dans une fenêtre du Finder)
Aussi, vous ne devriez pas désactiver le clic au travers pour les actions qui font intervenir un dialogue de confirmation.
Avec un contrôle dans un fichier nib
Avant d’utiliser cette classe, vous devez inclure les fichier parmis les sources de votre programme. Une fois que MFClickThroughDisabler
fait partie de votre projet, ouvrez le fichier nib contenant le contrôle que vous désirez désactiver et faites lire le fichier MFClickThroughDisabler.h par Interface Builder pour lui faire ajouter la classe à la hiérarchie. Vous pouvez ensuite instancier un objet de cette classe.
À partir de l’objet MFClickThroughDisable
instancié, glissez avec la touche contrôle enfoncé jusqu’au contrôle dont vous voulez désactiver le clic au travers. Du panneau « Connection » de l’inspecteur, connectez sur la prise control
. Voilà!
Pour un contrôle créé programatiquement
Si votre contrôle est créé à partir du code, et non pas d’un ficheir nip, vous devrez l’attachez au désactivateur de clic au travers dans le code aussi. C’est très simple, vous n’avez qu’à créer un MFClickThroughDisabler
connecté à votre contrôle et vous assurer qu’il est retenu, soit par le contrôleur de la fenêtre soit ailleurs.
Consultez le fichier d’entête pour plus de détails.
Problème connu
Si vous voulez désactiver un contrôle qui est attaché à un MFClickThroughDisabler
, vous devriez d’abord détacher le désactivateur en utilisant [disabler setControl:nil]
pour prévenir l’activation du contrôle quand la fenêtre reviendra au premier plan.
License
This program is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, version 2 of the License or any later version.
This means that you can include the source into your program, but if you make some change to it you must publish these changes. That’s all about it.