2013-05-27 16 views
0

我有一個UIImageView子類(AdImageView)放置在我的視圖控制器的NIB中。這個AdImageView知道如何使用從willMoveToSuperview調用的一些異步調用將遠程圖像加載到自身中。我知道這是有效的,因爲如果我通過我自己的代碼添加AdImageView,並在它被添加到超級視圖之前告訴它,加載它的圖像效果很好。但是,切換安裝程序以使用NIB時,我不確定何時在AdImageView上設置遠程路徑。設置從NIB和willMoveToSuperview加載之間的UIImageView子類:

我不能在任何VC的init方法中執行它,因爲NIB對象尚未設置。當VC的viewDidLoad被調用時,AdImageView的willMoveToSuperview已被調用。我嘗試設置一些IBOutlets,告訴AdImageView誰要求圖像url,但是在AdImageView的willMoveToSuperview之後也會調用它:

我可以在AdImageView的awakeFromNib中啓動遠程圖像加載,但我想繼續也可以選擇以編程方式將AdImageView添加到視圖控制器。把代碼放在那裏,然後讓我進入一個可以在willMoveToSuperview中重新調用遠程圖像加載的情況:除非我用某種感覺很難看的標誌來保護它。

那麼Interface Builder對象的狀態設置代碼通常在哪裏發生?

(很抱歉,對於這個問題沒有代碼,但它更多的是戰略)

回答

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 
+0

我認爲這是堵塞UIView的方式比實際應該更多的邏輯,但我不想在每個想要製作廣告的視圖控制器中亂丟遠程請求。當我能忍受一點點黑客攻擊時,把整個事情變成一個自己的視圖控制器,就像一個大錘。任何其他方法也是受歡迎的。在此期間我會試一試你的代碼,謝謝! – rob5408

相關問題