簡體   English   中英

在視圖控制器之間設置UIImageView.image

[英]Set UIImageView.image between view controllers

我想弄清楚...如果我在viewcontroller1(VC1)中並且正在運行NSTimer,則在100秒后將在viewcontroller1(VC2)中設置圖像,然后在10秒后顯示VC2(模式)然后再等待90秒鍾,如何從VC1的.m文件中設置當前顯示的VC(VC2)上的圖像(已經播放了約90秒鍾)?

我在網上找到了一些方法(經過一個小時的搜索),該方法是如何通過使用@property nonatmoic,retain傳遞UIImage來設置圖像的,但是即使如此,所有這些示例代碼也僅向我展示了如何設置數據,我仍然必須在VC2中運行單獨的NSTimer或其他函數,以不斷檢查該變量是否已更新,然后在VC2的.m中,將UIImageView的UIImage設置為之前的圖像(@property strong)通過。

無論如何,無論如何我都可以找到,這總是在“准備縫制”部分中完成的。

從VC1的.m是否沒有辦法在VC2中更改UIImageView的圖像? 或者是在prepare for segue從VC1進行選擇之后更改UIImageView使其從VC2的.m文件中實際執行的唯一方法?


簡而言之,我想從VC1更改VC2的UIImageView的圖像 ...而不是從VC1更改VC2的UIImage 我想使用新的VC后仍要這樣做,但是我仍然在舊VC的后台運行代碼

VC有多種通信方式。 最直接的是,VC1可以保留指向VC2的指針,而VC2可以提供對其imageView的公共訪問。

這不是特別好的設計,因為它建立在兩個VC之間的依賴關系中,但是它的外觀如下:

// vc1.m
#import "VC2.h"

@interface VC1 ()
@property (nonatomic, strong) VC2 *myVc2;
@end

- (void)presentVC2 {
    // allocate init VC2 however you do that
    VC2 *vc2 = [[VC2 alloc] init // ...

    // keep a pointer to it
    self.myVc2 = vc2;

    // do whatever you do to present it, navigation vc push, or presentViewController, etc.
}

- (void)timerFired:(NSTimer *)timer {

   // not sure from your question if you have the image at this point or if you
   // start a fetch for the image here.  let's say you have it
   UIImage *image = [UIImage imageNamed:@"someimageinmyappbundle.png"];
   self.myVc2.publicImageView.image = image;
}

如果VC2這樣提供對UIImageView的公共訪問,則此方法有效:

// VC2.h
@interface VC2 : UIViewController

// assuming you painted it in a storyboard or xib
@property(weak, nonatomic) IBOutlet UIImageView *publicImageView;

@end

請注意,我並不是說我喜歡任何一種,但這是從A點到B點的最直線。一個更好的模式可能是VC1使用NSNotification宣布圖像已准備就緒,而VC2則收聽並設置它自己的圖像。 但問題似乎是堅持認為VC1在VC2視圖層次結構上完成工作。

如果您尚未導出imageView,則可以將其導出(做一個屬性)。 只需注意一下您的原始假設-如果您的圖像是一個屬性,則可以創建自己的setter,並在VC2設置圖像時做任何您想做的事情。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM