现在写了一个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++ 封装的东西?
希望有经验的朋友给指点一下,感激不尽,谢谢!
淡淡烟草味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帮助。