Changer l'édition de champs.
muqaddar
Administrateur
Salut,
Je voudrais faire un truc tout simple en bindings.
Quand je clique sur un bouton "Editer", ça me passe l'état de 10 NSTextField à "Editable". Comment contrôler cela ?
Merci
Je voudrais faire un truc tout simple en bindings.
Quand je clique sur un bouton "Editer", ça me passe l'état de 10 NSTextField à "Editable". Comment contrôler cela ?
Merci
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
On doit pouvoir aussi binder directement sur l'état du bouton en créant un NSTransformer revoyant NO pour NSOffState et YES pour NSOnState (et interdire l'état mixte) et du coup même plus besoin d'une méthode d'action !
Faut quand même coder le transformer mais ce type de transformer a bien des chances de resservir souvent 8)
OK, alors je vais essayer le coup du transformeur. ce qui m'étonne, c'est que tu dis qu'il faut binder le bouton, pas les champs ?
Ah il s'appelle : SetEditableTransformer, il est appelé dans le initialize de MyDocument, mais j'y mets quoi dans
//le transofrmateur attend de connaà®tre l'état
- (id)transformedValue:(id)aValue
Je vois pas comment je gère le NSOnState ici.
Merci.
par exemple:
Si tu es sur un myDocument.nib, tu ajoutes un outlet de type NSButton à ton document "boutonEdition" pointant sur le dit bouton.
Puis tu bindes la propriété "editable" de tes champs sur le "file's Owner" modelKeyPath: "boutonEdition.state" avec une NSTransformer comme je t'ai décrit.
J'ai jamais testé mais ça devrait marcher dans la mesure un les NSButtons devraient être modelKeyCompliants.
//le transformateur attend de connaà®tre l'état
- (id)transformedValue:(id)etat
{
    if (etat==NO) {
}
}
Un truc du genre ?
Au fait, j'ai trouvé la soluce pour mes tableaux successifs imbriqués :-)
Le transformer recevra le state du bouton donc NSOnState ou NSOffState (interdire le NSMixedState)
et doit renvoyer YES ou NO au binding de "éditable"
Sauf que j'ai pas d'outlet pout contrôler le NStextFied ! Comment l'écrire dans le code alors pour faire la comparaison ?
Le NSTextField est bindé sur le Bouton via l'outlet du bouton.
[size=8pt]Je sens que je vais encore prendre mon apéro en retard ce soir moi [/size]
Pour ta returnedValue tu peux peut-être écrire:
par exemple
J'ai des problèmes de compatibilité entre les différents types.
"cannot find method numberWithBOOL " !!! , return type id assumed....
et "comparison between pointer and integer" : là c logique
enfin plein de fois ça :
error stray \240 in program
error stray \320 in program
error stray \240 in program
error stray \320 in program
error stray \240 in program
error stray \320 in program
... etc
Et j'ai aussi essayé if à la place du switch...
Ca c'est du typique copier-coller entre une fenêtre web php et Xcode...
Les fins de lignes contiennent un caractère invisible qui perturbe le compilateur.
Il faut donc retaper les fins de ligne du code copié-collé.
.
Ah, il me reste :
"switch quantity not an integer" et mes pb de numberWithBOOL.
Pourtant on renvoie bien un BOOL par le transformer...
Essaies plutot ça:
switch ([aValue intValue])
Pour [NSNumber numberWithBool: YES] qui passe pas ... Je sèche.
Essaies de retaper les lignes, y'a peut-être d'autre caractères invisibles quelque part ?
Je pensais que Bool était tout le temps en majuscule... autant pour moi.
Merci boss !
Plus d'erreur, il me reste une méthode à implémenter dans le transformer :
Tu dis que ça sert à déclarer le type d'objet renvoyé par le transformer, dans mon cas un booléen, alors je pense que ça doit être ça :
+ (Class)transformedValueClass {
return [NSNumber class];
}
Ainsi mon transformeur :
ne renvoie plus d'erreurs.
Je lance mon prog... mais pas de miracle, en cliquant sur le bouton relié à l'outlet, rien ne se passe. Pourtant mon NSTextField est bien bindé sur "boutonEdition.state". D'ailleurs comment il sait à quoi correspond "state" le binding ?
Donc si on binde sur le state d'un bouton, la valeur initiale est bien prise en compte mais le binding ne détecte pas le changement d'état lorsqu'on clique sur le bouton !
Les boutons ne semblent pas respecter les impératif du Key Value Observing sur ce point !
ça ressemble à un bug,
Quelqu'un a déjà expérimenté ce pb ? ???
Oublies l'IBOutlet du bouton,
Crées une variable d'instance de type int dans myDocument: "vEditable" destinée à recevoir l'état (NSOnState etc...) du bouton.
Binde le bouton par sa value sur filesOwner keyPath "vEditable". Le binding se chargera de la synchronisation avec le bouton.
Binde enfin la propriété enable et editable de tes champs sur filesOwner keyPath "vEditable".
Et voilà ça marche 8)
Tu veux pas plutôt dire de binder son target, y'a pas de value pour les boutons...
(ps : tjs pas d'adsl)
Par commodité, j'utilise ici un NSButton un peu particulier de type boite à cocher (chekBox) ou mieux encore dans ton cas un bouton avec un comportement de type On/Off (à sélectionner dans le panneau Attributes des info du bouton. Behavior: On/Off) qui colle assez bien à ton usage. Quand t'es en mode édition, le bouton est "enfoncé", un peu comme le bouton "Modifier" du carnet d'adresses.
C'est boutons là se bindent sans pb sur leur "value": on ou off. Justement ce qu'on veut 8)
Connexion coupée ce matin, ai débranché la freebox et rebranché. Connection revenue un peu plus tard (1h ?). Sais pas si y a un rapport.
ça y est, ça marche ClicCool, mais j'ai un petit soucis.
Quand le champ devient Editable, et bien, si on veut modifier le texte, le texte du NoSelection placeholder reste en dessous, c'ets pas très fun, mais brouillon... Dès que je vais à un autre champ ça disparaà®t, mais pour l'édition, c'ets dég !
As-tu une idée ?
[Fichier joint supprimé par l'administrateur]
Virtuellement car le champs permet tout de même l'édition de la valeure (non) sélectionnée ???
un Bug peut-être ??
Je continue de chercher, si quelqu'un a une idée elle est la bienvenue
Là qd je clique, c'ets dommage que le texte n'apparaisse pas ds un champ blanc par exemple !
en attendant mieux
D'autre part, en mode édition, il faudrait faire apparaà®tre un cadre autour du texte, tjs comme le carnet d'adresses...héhé encore du taf ;-)
Ce devrait être faisable avec le Null Place Holder
Pour ça tu peux encadrer le champs d'une NSBox dont tu bindes (encore ) la propriété Hiden avec isEditable du champs. Mais là le cadre apparâit dès que c'est éditable et pas seulement quand c'est édité.
Je regarde de plus près ce qu'on peut faire