ios - Développement Mac Les contrôles enfants ajoutés par NSView ne s'affichent pas
phpcn_u1582
phpcn_u1582 2017-05-17 10:05:24
0
2
1349

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 !

phpcn_u1582
phpcn_u1582

répondre à tous(2)
滿天的星座

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.

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal