0

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

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

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

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

(对不起,这个问题没有代码,但更多的是关于策略)

4

1 回答 1

0

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

@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
于 2013-05-27T23:30:35.190 回答