ScrollView中的视图

时间:2011-11-07 05:33:34

标签: iphone objective-c xcode cocoa-touch ipad

我正在尝试以编程方式创建UIScrollView。我有一个scrollView的ViewController。以下是我在loadView中实例化它的方法:

    CGRect fullScreenRect = [[UIScreen mainScreen] applicationFrame];
    self.scrollView = [[UIScrollView alloc] initWithFrame:fullScreenRect];
    self.scrollView.contentSize = CGSizeMake(self.view.frame.size.width, self.view.frame.size.height);

然后我将一些项目添加到其中,然后将其添加到view中的loadView,如下所示:

[self.scrollView addSubview:self.searchBar];
[self.scrollView addSubview:button];
[self.view addSubview:self.scrollView];

到目前为止,一切都应该没问题。但是,在其他功能中,我将添加ImageViews,然后我将需要设置scrollview的内容大小。我这样做只是使用[self.scrollView addToSubView:image],当我想编辑scrollview的内容大小时,我按如下方式进行:

// Calculate scroll view size
float sizeOfContent = 0;
for (int i = 0; i < [self.scrollView.subviews count]; i++) {
    UIImageView *view =[self.scrollView.subviews objectAtIndex:i];
    sizeOfContent += view.frame.size.height;
    [view release];
}

// Set content size for scroll view
self.scrollView.contentSize = CGSizeMake(self.scrollView.frame.size.width, sizeOfContent);

我在main.m类中一直收到EXC_BAD_ACCESS错误。

我怀疑问题在于保留实际的scrollView,因为我认为scrollView没有保留与视图子视图相同的对象。

有什么建议吗?提前谢谢!

1 个答案:

答案 0 :(得分:1)

如果您已将self.scrollView定义为@property(nonatomic, retain),那么第一个错误就是该行;

self.scrollView = [[UIScrollView alloc] initWithFrame:fullScreenRect];

它将scrollView的保留计数设置为2,这不是您所期望的。 alloc保留了这样的属性,

scrollView = [[UIScrollView alloc] initWithFrame:fullScreenRect];

我认为您的BAD_ACCESS错误来自此处;

for (int i = 0; i < [self.scrollView.subviews count]; i++) {
   UIImageView *view =[self.scrollView.subviews objectAtIndex:i];
   sizeOfContent += view.frame.size.height;
   [view release];
}

为什么你releasing查看?你没有alloc它,所以没有理由release它。删除[view release]行并再次检查。