NSOpenPanel le titre.
Depuis que je suis en OSx10.11 je n'arrive plus à mettre de titre ni à openpanel, ni à savepanel !
Qu'est-ce qui ne va pas dans ce code ?
- (NSString *)prise_Dossier:(NSString *)titre dos:(BOOL)newFold fich:(BOOL)fichier fol:(BOOL)folier
bun:(BOOL)paq typ:(NSArray *)lesTypes chem:(NSString *)chemin nom:(NSString *)nom
{
NSOpenPanel *choix_dossier ;
NSArray *les_fichiers ;
NSString *tete ;
int quoi ;
choix_dossier = [NSOpenPanel openPanel] ; // créé l'objet openPanel
choix_dossier.canChooseFiles=fichier ; // fichier si != 0
choix_dossier.canChooseDirectories=folier ; // dossier si == 0
choix_dossier.resolvesAliases=NO ; // ne pas resoudre les alias
choix_dossier.allowsMultipleSelection=NO ; // pas de sélection multiple
choix_dossier.treatsFilePackagesAsDirectories=paq ; // ouvrir les bundles ?
tete = [NSString stringWithFormat:@%@ ?", localiser(titre)] ;
choix_dossier.title = tete ; // met le titre
choix_dossier.canCreateDirectories = newFold ; // nouveau dossier possible
choix_dossier.allowedFileTypes=lesTypes ;
if (chemin!=nil) choix_dossier.directoryURL= [NSURL fileURLWithPath:chemin] ;
quoi = [choix_dossier runModal] ;
if (quoi == NSFileHandlingPanelCancelButton) return (@"") ; // annulé par l'utilisateur
les_fichiers = choix_dossier.URLs ; // récupère la matrice des URLs
if ( les_fichiers.count == 0) return (@"") ; // matrice vide ?
return [[les_fichiers objectAtIndex:0] path] ; // retourne le dossier
}
Réponses
Peut-être parce que tu définis deux fois la variable tete dans ton source ? Une fois dans l'entête de la fonction et une fois dans le corps. Enfin, si j'arrive encore à lire l'Objective-C.
Je pense que c'est correct:
NSString *tete ; // définit un pointeur de NSString
tete = [NSString stringWithFormat:@%@ ?", localiser(titre)] ; // attribue une valeur au NSString
écrire:
NSString *tete = [NSString stringWithFormat:@%@ ?", localiser(titre)] ; // donne le même résultat
Essaye de retirer la ligne NSString *tete et regarde si ça marche :
J'avais déjà fait, ça ne marche pas!
La solution la plus courte étant (en supprimant tete) :
choix_dossier.title = [NSString stringWithFormat:@%@ ?", localiser(titre)] ;
Le seul truc que je vois ce serait un souci autour de la fonction (ou macro) localiser()
Que valent titre et localiser(titre) pendant l'exécution ?
Procéder comme il le fait est tout à fait légitime...
Si tu mets une chaine statique dans title (genre @un titre), tu as quelque chose ?
J'avais ajouté tete pour être sur que le [NSString stringWithFormat:@%@ ?", localiser(titre)] ; fonctionnait bien. Et c'est le cas.
localiser est une simple macro:
#define localiser(laKlef) [[NSBundle mainBundle] localizedStringForKey:laKlef value:@"" table:@Localized]
Je vais essayer avec un string statique.
Mon dieu, que je suis heureux de l'apparition de Swift !
Le design des NSOpenPanel semble avoir changé depuis OS X 10.11 (si j'ai bien compris les Release Notes). Peut être est-ce la raison pour laquelle ton titre n'apparait pas ? (ou alors un bug). Au pire il y a toujours la propriété message qui, elle, semble correctement fonctionner.
Effectivement, il y a des modifications dans les openPanel !!!
A première vue, je ne vois rien en rapport direct avec ton souci. Ca sent plutôt le bogue.
Apple dit clairement que le design de OpenPanel est changé, mais pas celui de savePanel. C'est ce que j'observe !
Je ne trouve pas comment mettre off le "iCloud Drive" dans les préférences système.
Qu'il est évolué est une chose mais je ne vois nul par question que le title n'est plus géré. Je pense que c'est un oubli de transition.
Mon problème est d'indiquer à l'utilisateur ce qu'il doit ouvrir. J'ai trouvé deux trucs qui marchent:
1 comme le dit Lexxis, message marche parfaitement. Le texte arrive en haut de la fenêtre à la place du titre !
2 l'accessoryView marche également pour afficher un texte en bas de la fenêtre. Sous réserve d'avoir validé son affichage par:
lopenPanel.accessoryViewDisclosed = NO
Par contre je n'arrive toujours pas à afficher un titre dans un openPanel. j'utilise donc "message".
Le savePanel affiche correctement les titres, les messages et les accessoryView