iOS开发

父子控制器和直接把控制器的View添加到另一个控制器的View的

2017-10-28  本文已影响93人  guojingjing8

        首先我们先说明什么是父子控制器,下面我举例一段代码来说明:

图1

         而把一个控制器的view添加到另一个控制器的view上,我想我们好多人都这么干过,笔者也干过,尤其是当一个view过于复杂时我们都会实例化一个controller,把这个view作为该controller的view,这样我们可以层层剥离视图,降低耦合度,从而达到层次清晰的效果.但是,这样做可能带来一些不利的后果,例如:"响应者链条的断开,无法处理事件".

        响应者链条是n或多个响应者对象在一起组成的链条。每个对象都是能处理事件的,所以利用这个链条能让多个控件处理同一个触摸事件。

造成上面的悲剧我们可以从事件的传递过程来理解:

        如果当前View不能处理当前事件,那么事件就会沿着响应者链条进行传递直到遇到能处理该事件的响应者对象为止。

       1.具体来说就是接收事件的view如果不能处理事件并且他不是顶层的view那么该事件会向他的父view进行传递。

        2.如果父view扔不能处理事件继续向上传递,循环上面的过程。如果所有的view都不能处理这个事件。那么事件会传递给它们的viewcontroller,如果控制器还不能处理该事件,那么事件传递给window,如果窗口不能处理该事件的话,传递给UIApplication,最后连UIApplication都不能处理的话,这个事件就不处理了。

        在实际开发中,为了避免出现上面问题:首先我们应把父子控制器作为我们的第一选择,实在不得已使用另一种选择,也要注意没添加到响应者链条中的controller时不能处理事件的.为了更形象的说明笔者写了个小demo,欢迎下载~github.com/guojingjingghost/ResponderChain.git

上一篇下一篇

猜你喜欢

热点阅读