Maintenant, j'ai écrit un programme de démonstration pour la plate-forme Mac. La couche supérieure est programmée en utilisant un mélange de C++ et d'OC. Le suffixe du contrôleur de vue a également été modifié en .mm. L'interface est directement glissée et déposée à l'aide du storyboard. Des NSViews ont été ajoutés, comme le montre la figure ci-dessous. Show :
Lors de la programmation, j'ai passé les deux NSViews personnalisés à droite via l'interface, j'ai converti les pointeurs des deux nsviews en types void, je les ai passés à travers une couche de modules encapsulés de couche C++ et je les ai finalement passés à la couche inférieure. deux pointeurs de type void renvoient à nouveau au type nsview*, puis ajoutentsubview aux deux nsviews, ajoutant deux champs nstextfields. Lors du débogage, cela montre que le nombre de sous-vues est bien de 1, indiquant qu'elles ont été ajoutées avec succès.
Créez des contrôles et ajoutez le code des contrôles enfants :
_TextField = [[NSTextField alloc] initWithFrame:NSMakeRect(0, 0, 100, 20) ];
[_parentView addSubview:_TextField];
Après cela, j'ai utilisé l'outil de débogage de l'héritage de l'interface utilisateur fourni avec xcode, et il a montré que deux champs nstextfields avaient été ajoutés avec succès à nsview, comme indiqué ci-dessous :
Vous pouvez voir que les deux NSViews à droite ont ajouté avec succès deux NStextfeilds,
Cependant, les deux zones de texte ne sont pas visibles dans l'interface en cours d'exécution. En fait, elles sont devenues transparentes et peuvent être cliquées. ceci :
Ma question est la suivante : pourquoi addsubview réussit-il mais ne peut pas afficher les sous-contrôles normalement pendant l'exécution ? Les deux contrôles deviennent transparents. Je n'ai effectué aucun réglage lié à la transparence ou à l'arrière-plan.
Est-ce lié à l'utilisation de la compilation mixte C++ OC ? NSVIew passe également par une couche d'encapsulation C++ lorsqu'il est transmis ?
J'espère que des amis expérimentés pourront me donner des conseils, je vous en serais très reconnaissant !
Pouvez-vous poster le code qui crée
NSTextField
和添加到view
?J'ai essayé de le faire glisser directement dans l'interface graphique ou d'ajouter du code pour l'afficher.
Après une journée de recherche, j'ai finalement trouvé la cause du problème : les contrôles de l'interface utilisateur n'étaient pas opérés dans le thread principal, c'est-à-dire que la vue parent addsubview était effectuée dans le thread enfant.
Pièce jointe 1 : http://blog.csdn.net/msss00/a... Résumé des raisons pour lesquelles iOS addsubview ne s'affiche pas)
Pièce jointe 2 : http://blog.csdn.net/libaineu... (iOS Deux méthodes pour que les fils de discussion enfants mettent à jour l'interface utilisateur)
Le problème est résolu, également grâce à @tomdfriwel pour son aide.