2012-04-03 33 views
3

我想按鈕時的第一個視圖觸及上的UIImageView這樣設置一個簡單的圖片:如何在iOS 5上的segues之間的Storyboard UIViewController上設置屬性?

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
    ImageViewController *imageViewController = [segue destinationViewController]; 
    imageViewController.title = @"test"; 
    imageViewController.imvBig.image = [UIImage imageNamed:@"test.png"]; 
    imageViewController.lblTest.text = @"test2"; 
} 

.title僞獲取設置和顯示得很好,但由於某種原因,我不能讓imvBig.image顯示出來,也不能讓標籤文本出現。是的,我擁有使用Outlet等創建的屬性(因爲我只是將它從IB拖到代碼中,並且它被自動處理)。

有人能告訴我如何正確設置一個屬性從一個常規視圖到下一個故事板設置?

回答

2

大概ImageViewController尚未加載從然而,當系統發送prepareForSegue:sender:故事板的意見,因此那些出口(imvBiglblTest)是零。發送給nil的消息默默無視。

源視圖控制器通常不適合使用目標視圖控制器的視圖。目標視圖控制器應該設置這些視圖的設置,通常在viewDidLoad,viewWillAppear:viewDidAppear:

+1

我需要從導航堆棧上的先前視圖設置URL。我需要知道如何正確地將數據傳遞給ImageViewController。 – 2012-04-03 04:57:12

+2

通常您在目標視圖控制器上爲要在prepareForSegue中傳遞給它的數據聲明屬性。然後,在該視圖控制器的viewDidLoad(或更高版本(如果適用))中,更新其視圖以反映數據。 – rickster 2012-04-03 05:13:13

2

貌似我能得到這個通過創建一個NSString屬性,然後在ImageViewController的viewDidLoad中的標籤設置爲字符串的工作:

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view. 

    self.lbltest.text = _myString; 
} 

我想我不能直接設置該屬性,直到視圖加載完畢。

+0

它既是「不能」又是「不應該」 - 您不希望調用視圖控制器直接在新控制器中操作子視圖,因爲您可能會在一段時間後改變顯示內容的方式。只需傳遞數據並將其正確顯示在viewDidLoad()中即可。 – 2013-09-30 20:08:49

0

您不需要設置viewController只是使用segue destinationViewController屬性。我總是設置在故事板一個標識符第一所以可以使用多個塞格斯:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
if ([[segue identifier] isEqualToString:@"Show ImageViewController"]) { 

[segue.destinationViewController setTitle:@Test"]; 
[segue.destinationViewController setFoo:@"Bar"]; 
//More stuff to set 
} 

}

在ImageViewController也創建一個圖像作爲屬性和合成它,然後設置在圖像視圖在viewDidAppear:

self. imvBig.image = myNewImge;//this in the viewDidLoad 

,並設置在SEGUE的形象:

[segue.destinationViewController setMyImage:[UIImage [email protected]"test.png"]]; 
相關問題