首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >UIScrollView幻影子视图

UIScrollView幻影子视图
EN

Stack Overflow用户
提问于 2011-04-14 21:51:07
回答 1查看 5.3K关注 0票数 18

我使用以下命令从nib文件加载视图:

代码语言:javascript
复制
NSArray *nibViews = [[NSBundle mainBundle] loadNibNamed:@"AnalysisView" owner:self options:nil];
AnalysisView *gridView = [nibViews objectAtIndex: 0];

nib包含一个名为gridScrollView的滚动视图,在AnalysisView实现文件中,我有一个方法可以将视图作为子视图添加到滚动视图中:

代码语言:javascript
复制
for (NSInteger i = [results count] -1; i >= 0; i--) 
{
    Result *result = [results objectAtIndex:i];
    [self loadResult: result];
}

- (void) loadResult: (Result *) result
{
    NSArray *nibViews = [[NSBundle mainBundle] loadNibNamed:@"GridView" owner:self options:nil];
    GridView *gridView = [nibViews objectAtIndex: 0];
    gridView.tag = self.graphCount;

    CGRect gridFrame = gridView.frame;

    CGFloat yOffset = gridFrame.size.height * self.graphCount;
    gridView.frame = CGRectMake(0, yOffset, gridFrame.size.width, gridFrame.size.height);

    [self.gridScrollView addSubview: gridView];
    self.gridScrollView.contentSize = CGSizeMake(self.gridScrollView.frame.size.width, (yOffset + gridFrame.size.height));

    self.graphCount++;
}

我已经将scrollviews委托设置为AnalysisView,并连接了did end decelaring方法

代码语言:javascript
复制
-(void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
{
      NSLog(@"%d", [scrollView.subviews count]);
}

当触发scrollViewDidEndDecelerating方法时,它报告子视图的数量是5.3。这些子视图中有3个是GridViews的,这是我所期望的。然而,有两个UIImageViews,我不知道他们为什么会在那里。

这是一个问题,因为我打算在scrollViewDidEndDecelerating方法中使用viewWithTag检索视图,并在视图上调用一个方法,但是每当我尝试检索一个标记为0的视图时,我都会检索一个UIImageView,这会导致我的应用程序崩溃,因为该方法不能在图像视图上调用。

我知道解决这个问题的一种方法是将我的GridViews存储在一个单独的实例数组中,然后从那里引用它们。但我很想知道这两个UIImageViews是什么以及它们是如何实现的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-04-14 21:54:09

默认情况下,UIScrollView包含2个UIImageViews作为滚动指示器的子视图。虽然我在文档中找不到任何关于滚动指示器实现的具体信息,但这些图像视图在类声明中存在(参见UIScrollView.h标题):

代码语言:javascript
复制
UIKIT_CLASS_AVAILABLE(2_0) @interface UIScrollView : UIView <NSCoding> {
    ...
    UIImageView* _verticalScrollIndicator;
    UIImageView* _horizontalScrollIndicator;

您也可以不从0开始分配标签,而是从某个正数开始-这样就避免了与标准子视图的冲突

票数 45
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5664281

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档