如果以编程方式创建,则无法访问 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的主要内容,如果未能解决你的问题,请参考以下文章

无法通过 *** 以编程方式访问网络路径

以编程方式访问由属性占位符创建的属性

在Swift 3中以编程方式创建一个没有XIB的NSViewController

无法隐藏以编程方式创建的 UIButton? [关闭]

以编程方式创建的 UIView 的框架为 0

如何以编程方式启用php扩展intl