Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 确定UIView子类的可见部分(框架),该部分作为子视图添加到表视图中的单元格中_Ios_Objective C_Xcode_Uitableview_Uiview - Fatal编程技术网

Ios 确定UIView子类的可见部分(框架),该部分作为子视图添加到表视图中的单元格中

Ios 确定UIView子类的可见部分(框架),该部分作为子视图添加到表视图中的单元格中,ios,objective-c,xcode,uitableview,uiview,Ios,Objective C,Xcode,Uitableview,Uiview,让我们把这个UIView子类称为SomeClass。这个类是静态库的一部分。一些客户将使用此库,并将此SomeClass的实例添加到其(客户)表视图的单元格中 我(SomeClass)需要确定SomeClass何时“进入”屏幕(将变为可见),何时“退出”屏幕(将变为不可见) 我可以使用didMoveToWindow:方法,然后检查self.window中的nil。但是,有一个问题,SomeClass在事件实际可见之前获取该事件,因为单元格根据表视图概念进行“准备”。我需要确定的是,某些用户可以1

让我们把这个UIView子类称为SomeClass。这个类是静态库的一部分。一些客户将使用此库,并将此SomeClass的实例添加到其(客户)表视图的单元格中

我(SomeClass)需要确定SomeClass何时“进入”屏幕(将变为可见),何时“退出”屏幕(将变为不可见)

我可以使用
didMoveToWindow:
方法,然后检查
self.window
中的nil。但是,有一个问题,SomeClass在事件实际可见之前获取该事件,因为单元格根据表视图概念进行“准备”。我需要确定的是,某些用户可以100%看到它

  • 一种确定的方法是使用
    scrollViewDidScroll:
    。假设SomeClass将通过在超级视图上使用迭代获得滚动视图,并将作为委托订阅找到的滚动视图。但他将被某个单元格删除,该单元格将作为滚动视图的代理进行订阅。所以我需要在这里发明一些解决方案。例如,在Android中,可以添加observer,在这种情况下,SomeClass始终是一个侦听器,并且不会覆盖任何其他侦听器。Android中存在多对一关系,不像iOS中的一对一关系

  • 另一种方法是,当某个类可见时,我可以在
    didmovetown:
    中启用某个计时器,该计时器将检查每个X时间及其帧。当SomeClass离开屏幕时,计时器将被禁用

  • 可能有一种方法可以在低级别进行检查,而无需在某些低级别重画方法上使用滚动视图和计时器。可能吗

  • 那么什么是最好的(使用较少的资源/良好的设计)方法呢?

    您可以使用它来检查单元格的边框是否与自定义视图的边框相交。除此之外,这是你正在寻找的方法


    如果如您所说,表视图单元格始终将SomeClass作为子视图,那么使用UITableViewDelegate将更有意义。

    SomeClass的框架始终与单元格的框架相交,他被添加为子视图。您阅读了我的问题吗?我已经描述了一些关于DidMoveToIndown的内容。在这种情况下,从视图中抽象出逻辑并检查它。当单元格显示时,视图将显示出来——请参见我的编辑。在这个解决方案中,如果某个类订阅为表视图的委托,它将覆盖客户的表视图委托,反之亦然,客户表视图委托始终可以重写SomeClass。如果需要按照单元格显示的内容执行操作,则tableView:willDisplayCell:ForRowatineXpath:是您的逻辑所在。你有没有想过也许你把太多的责任放在某个班级上了?SomeClass是一个视图,它不应该有任何逻辑。你读过这篇文章吗?