搜尋

首頁  >  問答  >  主體

ios - Mac開發 NSView 新增的子控制項不顯示

現在寫了一個Mac平台下的Demo程序,上層使用c 和OC混合編程,viewcontroller後綴也改成了.mm,界面是使用storyboard直接拖曳的,添加了兩個自定義的NSView, 如下圖中所示:

程式設計的時候我將右邊的兩個自訂的NSView都透過介面傳遞下去了,將兩個nsview的指標轉換為void 類型,中間經過了一層c 層的封裝的模組,最後傳遞到底層,再次將兩個void 類型的指標強轉回nsview* 類型,之後在兩個nsview上addsubview,添加了兩個nstextfield,調試的時候顯示subview的數量確實是1,說明成功添加上了。
建立控制項和新增子控制項程式碼:

     _TextField = [[NSTextField alloc] initWithFrame:NSMakeRect(0, 0, 100, 20) ];
     [_parentView addSubview:_TextField];

之後用xcode自帶的UI繼承調試工具,顯示也成功把兩個nstextfield加到nsview上了,情況如下圖:





##可以看到右側兩個NSView成功的添加了兩個NStextfeild,###但是實際運行的介面卻怎麼也看不到這兩個文字框,實際上是變透明了,可以點擊到,運行時效果是這樣的: ################ ###我的問題是: 為什麼addsubview成功卻在運行時不能正常顯示出子控件,兩個控件變透明了,我並沒有進行透明或背景等相關的設定。 ### 是不是跟使用c OC 混編有關,NSVIew向下傳遞的時候還經過了一層c 封裝的東西? ###希望有經驗的朋友給指點一下,感激不盡,謝謝! ###
phpcn_u1582phpcn_u15822858 天前1437

全部回覆(2)我來回復

  • 滿天的星座

    滿天的星座2017-05-17 10:07:24

    你能把創建NSTextField和添加到view的程式碼貼出來嗎?
    我試了圖形介面直接拖進去或程式碼添加都能顯示。

    回覆
    0
  • 淡淡烟草味

    淡淡烟草味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的兩種方法)
    問題解決,也感謝@tomdfriwel幫忙。

    回覆
    0
  • 取消回覆