2012-02-27 145 views
0

我的主(根)視圖X正在使用來自方法populateMainScreen()的一些數據創建。從子視圖更改父視圖中的數據IOS

通過點擊主視圖X內的一個按鈕,子視圖Y出現在屏幕上。

如何從Y中觸發此X的populateMainScreen()方法,這會導致視圖X被更改。

如果我在將來的任何時候導航到它,新的更新版本應該是可見的。

+0

有一個很簡單的方法:[Y superview]是X. – NeverBe 2012-02-27 15:24:38

+0

你可以修改這個問題來澄清X和Y之間的關係嗎? Y是X的子視圖,還是X和Y是父/子關係中兩個視圖控制器的相應視圖? – Caleb 2012-02-27 15:38:10

+0

@Caleb Y是X – 2012-02-27 15:56:58

回答

2

在適當的MVC實現中,您需要X和Y的視圖控制器從一些常見的模型對象中讀取他們需要的數據。 Y不應該做任何特殊的事情才能讓X顯示正確的數據; Y只需要對模型對象進行更改。然後,當X重新出現時,其控制器將再次從模型中獲取它需要的數據。如果模型發生變化,那麼這種變化自然會反映在X(和Y以及顯示來自同一模型的數據的任何其他視圖中)。

如果您沒有數據模型,或者您的模型沒有存儲Y修改的數據,那麼另一種方法是讓X的控制器保存對Y控制器的引用。很可能X的控制器創建了Y的控制器(因爲你指出它們之間存在父/子關係),所以X的控制器很容易在實例變量或屬性中存儲對Y的控制器的引用。在它的-viewWillAppear方法中,X的控制器可以檢查該屬性;如果它不是零,它可以從Y的控制器中檢索它需要的任何信息。然後它會設置屬性爲nil:

-(void)viewWillAppear 
{ 
    if (self.ycontroller != nil) { 
     self.person.name = self.ycontroller.name; 
     self.person.address = self.ycontroller.address; 
     self.ycontroller = nil; 
    } 
} 
0

有幾個選項

  • 讓孩子視後的NSNotification,並有家長是該通知的觀察員,通過在數據通知。
  • 裝入一個單獨的對象的數據,這兩個視圖可以引用
  • 給孩子在父到的方法的參考(可能通過聲明協議)
1

的SuperView是可訪問的(如由NeverBe提到),但是如果你想訪問視圖控制器,面向對象的方式是通過委託。因此,您將Y的視圖控制器上的委託屬性設置爲X的視圖控制器,然後通過委託發送方法。您可以通過協議定義非標準方法。

你可以像上面提到的Caleb一樣更新模型 - 任何一種方式都可以。

相關問題