如果以编程方式创建,则无法访问 UIImageView
Posted
技术标签:
【中文标题】如果以编程方式创建,则无法访问 UIImageView【英文标题】:Can't access UIImageView if created programmatically 【发布时间】:2013-01-27 06:05:19 【问题描述】:如果我通过 Storyboard 创建 UIImageView
并将其作为 @property
添加到 ViewController.h
中,我可以从 ViewController.m
中的任何位置通过 [self UIImageView]
或 self.UIImageView
访问该 UIImageView
。
但是如果我从viewDidLoad
以编程方式创建UIImageView
,如下所示,我似乎无法从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;
所以稍后,如果我想修改从viewDidLoad
创建的任何UIImageView
中显示的图像,我似乎无法访问它。有谁知道我做错了什么?
【问题讨论】:
【参考方案1】:您需要在您的头文件中创建您的 UIImageView,然后它将在整个视图的其余部分中可用。不过,您需要将其添加到 viewDidLoad 中的视图中。
Header
UIImageView *image;
Main // ViewDidLoad
image = [UIImageView alloc] .....
[self.view addSubView image];
Main Function .....
[image setImage ....
【讨论】:
不,一点也不,如果您在头文件中以编程方式创建它,在 viewDidLoad 中对其进行初始化并将其添加到视图中,您将能够在视图中的任何位置访问它,但您需要将其添加到视图中【参考方案2】:AgnosticDev 在这里试图说的答案是将 ivar 添加到您的视图控制器的 .h 文件中......例如:
@implementation YHLViewController : ViewController
UIImageView * currImageView;
然后在您的“viewDidLoad
”方法中,您可以通过以下方式分配和初始化它:
currImageView = [[UIImageView alloc] init];
并且可以从视图控制器中的其他任何地方访问它。
【讨论】:
以上是关于如果以编程方式创建,则无法访问 UIImageView的主要内容,如果未能解决你的问题,请参考以下文章