Mac プラットフォームでデモ プログラムを作成しました。上位層は c と OC を組み合わせてプログラムされています。ビューコントローラーのサフィックスも .mm に変更されています。インターフェイスは、ストーリーボードを使用して直接ドラッグ アンド ドロップされています。次の図に示すように、2 つのカスタム NSView が追加されました:
プログラミングの際、右側の 2 つのカスタム NSView をインターフェイス経由で渡し、2 つの nsview のポインターを void 型に変換し、中央に C 層でカプセル化されたモジュールの層を渡しました。それを最下層に移動し、2 つの void 型ポインタを再び nsview* 型に強制的に戻します。次に、2 つの nsview に addsubview を追加し、2 つの nstextfields を追加します。デバッグ中に、サブビューの数が確かに 1 であることが示されます。追加が成功したことを示します。
コントロールを作成し、サブコントロール コードを追加します:
その後、xcode に付属の UI 継承デバッグ ツールを使用したところ、以下に示すように、ディスプレイで 2 つの nstextfield が nsview に正常に追加されました。
右側の 2 つの NSView が 2 つの NStextfeild を正常に追加していることがわかります。 ただし、これら 2 つのテキスト ボックスは、実際に実行中のインターフェイスでは表示されません。実際、これらは透明になり、クリックできるようになります。実行時の効果は次のとおりです:
私の質問は次のとおりです: addsubview は成功するのに、実行時にサブコントロールを正常に表示できないのはなぜですか? 2 つのコントロールが透明になります。透明度や背景に関連する設定を行っていません。 それは c OC 混合コンパイルの使用に関連していますか? NSVIew は、受け渡されるときに c カプセル化の層も通過しますか? 経験豊富な友人が私にアドバイスをくれることを願っています。とても感謝しています、ありがとう!
滿天的星座2017-05-17 10:07:24
を作成するコードを投稿していただけますか? NSTextField
和添加到view
それをグラフィカルインターフェイスに直接ドラッグするか、コードを追加して表示しようとしました。
淡淡烟草味2017-05-17 10:07:24
一日かけて探した結果、ようやく問題の原因が分かりました。UI コントロールがメインスレッドで操作されていなかった、つまり、親 View の addsubview が子スレッドで実行されていたのです。
添付資料1: http://blog.csdn.net/msss00/a... iOSのaddsubviewが表示されない原因まとめ)
添付資料2: http://blog.csdn.net/libaineu... (iOS)子スレッドが UI を更新するための 2 つの方法)
@tomdfriwel の助けにも感謝し、問題は解決しました。