获取UIScrollView的所有子视图

时间:2013-09-04 14:59:01

标签: ios objective-c uiscrollview

我需要在UIScrollView中获取所有子视图的数组。现在我正在使用

NSArray *subviews = [myScrollView subviews];

但这似乎只返回代码运行时可见的子视图。我需要在UIScrollView的整个范围内的所有子视图,甚至是当前隐藏的那些(如在屏幕外)。我怎么能得到它?

基本上,我正在寻找像contentSize的{​​{1}}属性之类的东西,除非只返回UIScrollView的大小,如果它足够大以显示所有它是内容,我希望它能够返回内容。

编辑:我想我已经弄清楚了:滚动视图不适用实际上是UIScrollView - 而且我认为它正在消除我屏幕上的单元格,这就是为什么他们没有出现。我打算做一些测试来确认。

2 个答案:

答案 0 :(得分:8)

尝试使用以下代码为我工作。

for(UIView * subView in myScrollView.subviews ) // here write Name of you ScrollView.
{ 
     // Here You can Get all subViews of your myScrollView.
    // But For Check subview is specific UIClass such like label, button, textFiled etc.. write following code (here checking for example UILabel class).

        if([subView isKindOfClass:[UILabel class]]) // Check is SubView Class Is UILabel class?
        {
            // You can write code here for your UILabel;
        }
}

答案 1 :(得分:3)

<强> TL;博士

事实证明

NSArray *subviews = [myScrollView subviews];

确实会返回UIScrollView *myScrollView中的所有子视图,即使它们在屏幕外也是如此。


详情

我实际遇到的问题是我尝试使用它的滚动视图实际上是UITableView,当UITableViewCell中的UITableView出现在屏幕外时实际上它已从UITableView中移除 - 所以当我调用subviews时,我正在寻找的单元格不再位于滚动视图中。

我的解决方法是在我的UITableViewCell调用的单独方法中构建所有viewDidLoad,然后将所有这些单元格放入数组中。然后,我没有使用subviews,而是使用了那个数组。当然,这样做会稍微损害性能(在cellForRowAtIndexPath中你只是从数组返回单元格,这比通常使用的dequeueReusableCellWithIdentifier方法慢,但它是唯一的我可以找到获得我需要的行为的方式。