如果以编程方式创建,则无法访问UIImageView

时间:2013-01-27 06:05:19

标签: ios uiview uiscrollview uiimageview

如果我通过故事板创建UIImageView并将其作为@property添加到ViewController.h,我可以UIImageView中的任意位置访问ViewController.m通过[self UIImageView]self.UIImageView

但如果我按照下面的UIImageView以编程方式创建viewDidLoad,我似乎无法从外部viewDidLoad访问它。

UIImageView *prevImgView = [[UIImageView alloc] init];
UIImageView *currImgView = [[UIImageView alloc] init];
UIImageView *nextImgView = [[UIImageView alloc] init];

NSArray *imageViews = [NSArray arrayWithObjects:prevImgView, currImgView, nextImgView, nil];

UIScrollView *scrollView = [[UIScrollView alloc] initWithFrame:self.view.bounds];
[self.view addSubview: scrollView];

CGRect cRect = scrollView.bounds;
UIImageView *cView;

for (int i=0; i<imageViews.count; i++) {
    cView = [imageViews objectAtIndex:i];
    cView.frame = cRect;
    [scrollView addSubview:cView];
    cRect.origin.x += cRect.size.width;
}

所以稍后如果我想要修改我在UIImageView创建的viewDidLoad中的任何一个中显示的图像,我似乎无法访问它。有谁知道我做错了什么?

2 个答案:

答案 0 :(得分:1)

您需要在头文件中创建UIImageView,然后在整个视图的其余部分都可以使用它。您需要将它添加到viewDidLoad中的视图中。

         Header
         UIImageView *image;

         Main // ViewDidLoad
         image = [UIImageView alloc] .....
         [self.view addSubView image];


         Main Function .....
         [image setImage ....

答案 1 :(得分:1)

AgnosticDev在这里试图说的答案是在视图控制器的.h文件中添加一个ivar ......例如:

@implementation YHLViewController : ViewController
{
    UIImageView * currImageView;
}

然后在您的“viewDidLoad”方法中,您可以通过以下方式分配和初始化它:

currImageView = [[UIImageView alloc] init];

并可以从视图控制器中的任何其他位置访问它。