搜索

首页  >  问答  >  正文

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_u15822770 天前1361

全部回复(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
  • 取消回复