怎么在view 上添加一个view

怎么在view 上添加一个view,第1张

比如说有两个控制器,一个是FirstViewController,一个是SecondViewController,如果要在FirstViewController上添加SecondViewController,则在FirstViewController中,

SecondViewController *secondVc = [[SecondViewController alloc] init]

[self addChildViewController:secondVc]

这就把一个控制器添加到另一个控制器上去了

但是仅仅如此还是不够 严谨的,苹果官方建议,当一个控制器成为另一个控制器的子控制器时,其对应的view也要成为另一个控制器的子View.

即,添加完控制器之后,在加一句

[self.view addSubView:secondVc.view]

不存在这个问题。假设你将要执行

[someView addSubView:sbView]

那么在被添加到父视图someView之前,如果sbView已经被otherView加载了,那么上面

的代码会先讲sbView从otherView remove掉,在被加载到someView。

所以一个view是不可能同时被2个以上的view加载做子视图的。

WindowManager中有个添加View的函数

public void addView(View view, ViewGroup.LayoutParams params)

Window中有个添加View的函数:

public void addContentView(View view, ViewGroup.LayoutParams params)

弄清楚这两个类和这两个函数的作用设计到Android整个Surface系统,这里不详述,只作说明,供自己记录。

事实上,这两个函数是Activity上显示View至关重要的控制函数,它们在框架层已经有了明确的分工。查看这两个函数的调用过程可以发现addView的调用是针对ViewRootImpl的,也就是它添加的View相当于最底层的PhoneWindow.DecorView;而addContentView最终指向了ViewGroup.addView(childView)。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/10981656.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-12
下一篇 2023-05-12

发表评论

登录后才能评论

评论列表(0条)

保存