在从NIB和willMoveToSuperview加载之间设置UIImageView子类:

时间:2013-05-27 23:22:01

标签: ios objective-c uiview uiviewcontroller

我在视图控制器的NIB中放置了一个UIImageView子类(AdImageView)。此AdImageView知道如何使用从willMoveToSuperview调用的一些异步调用来关闭远程映像并将其加载到自身中。我知道这是有效的,因为如果我通过我自己的代码添加AdImageView并在它被添加到超级视图之前告诉它要加载哪个图像效果很好。但是,当切换设置以使用NIB时,我不确定何时在AdImageView上设置远程路径。

我无法在任何VC的init方法中执行此操作,因为尚未设置NIB对象。当VC的viewDidLoad被调用时,AdImageView的willMoveToSuperview:已被调用。我尝试设置一些IBOutlets告诉AdImageView谁要求提供图片网址,但这也是在AdImageView的willMoveToSuperview之后调用的:。

我可以在AdImageView的awakeFromNib中启动远程图像加载,但我想继续也可以选择以编程方式将AdImageView添加到视图控制器。把代码放在那里然后让我处于一种情况,我可以在willMoveToSuperview中重新调用远程图像加载:除非我用某种感觉难看的标志来保护它。

那么Interface Builder对象的状态设置代码通常出现在哪里?

(抱歉这个问题没有代码,但它更多的是关于策略)

1 个答案:

答案 0 :(得分:0)

这听起来不像是view的工作,但你可以做这样的事情

@interface AdImageView : UIImageView

@property (nonatomic, copy) NSString *path

@end

@implementation AdImageView

- (void)setPath:(NSString *)path
{
  if (_path != path) {
    _path = [path copy];
    [self loadAd];
  }
}

- (void)didMoveToSuperview
{
  [super didMoveToSuperview];

  [self loadAd];
}

- (void)loadAd
{
  // This will only load when the view is on screen
  if (self.window) {
    // ... fetch ad etc
  }
}

@end