假设我有ViewController A,它是viewModel AVM。 A有一个containerView,它是ViewController B及其viewModel BVM。 A的引用为B,AVM的引用为BVM作为其 subview 模型。
我有一个C,它是一个管理器类,它控制B的行为,从B中调用B中的函数,例如setSDImage(url)。
B具有UIImageView并具有带有回调的setSDImage(url)函数。 A有一个按钮,当按下按钮时,它将触发B的setSDImage(url)。
所以问题是:从A按下按钮,转到AVM,然后AVM与C联系,告诉它对B做一些工作,现在,由于函数调用是UI层的setSDImage(url),C必须获得B的引用。 。另外,回调也需要在B中实现,这就是为什么我不知道如何在BVM中而不是在BVM中完成这项工作的原因。
因此,在这种情况下的问题:
如图1所示,管理器类C控制着B的行为。AVM如何在不传递B引用的情况下联系C? (因为VM不想了解ViewControllers/ View )
2,管理者C类应该控制B还是BVM?我让它控制B而不是BVM,因为a)设置图像功能必须在UILayer中完成,即B。b)回调是否需要在UILayer中实现?
最佳答案
仅从您的描述就很难理解发生了什么,但是我想说一个称为setSDImage
并带有URL的方法不属于 View Controller ,因为那样的话, View Controller 需要完成下载图像的工作。数据,将其转换为UIImage
,然后将其设置为UIImagView
。
下载图像并将其转换是应该由BVM
启动的工作,然后在B
准备就绪时通知UIImage
。
因此,为了回答您的第二个问题,我认为C
应该引用BVM
,对于AVM
来说应该很容易。
那有意义吗?