2014-05-19 51 views
0

我的目標:故事板:如何將單個視圖鏈接到多個容器視圖?

我正在使用故事板創建在我的應用程序的意見。

我的目標是有一個將被暴露,並在應用的所有頁面鏈接視圖的一個實例。在我的情況下,如果有一個包含很多選項卡的應用程序,我希望該視圖將顯示在所有選項卡中並具有相同的狀態。

我嘗試和做的是:

我創建的視圖,並在那些在不同標籤的容器意見嵌入它。

當打開應用程序時,視圖出現並運行在所有頁面上。但是,如果我在一個視圖中進行更改,它不會傳播到其他視圖。

換句話說,在如果我更改了一個頁面切換的狀態下面的例子,當我瀏覽到另一個頁面,改變將不會出現(在我的應用我有標籤來做到這一點)。 enter image description here

我看到「Traits」下有一個「link」選項,但沒有幫助。

我怎樣才能確保只有一個在所有標籤頁視圖的瞬間?

乾杯!

+0

塞格斯總是實例化新視圖控制器,所以在故事板的屏幕截圖中,每個嵌入的segues都會用交換機實例化視圖控制器的不同實例 - 這就是爲什麼交換機不能在頁面之間保持其狀態的原因。可能有更好的方法來實現你想要的東西,所以你應該編輯你的問題來給出你的應用程序結構的更多細節,以及擁有共享控制器的目標是什麼。 – rdelmar

+0

感謝您的回覆@ rdelmar。我已經修改了這個問題,希望能夠更清楚一點。我明白爲什麼我沒有看到正確的行爲,但我認爲有一種簡單的方法可以確保只有一個實例在所有視圖控制器之間創建和共享?謝謝 – YKa

回答

0

正如我在我的評論說,你不能塞格斯做到這一點,因爲他們總是創建新實例。所以,我認爲您必須將代碼中的子控制器添加到每個需要它的控制器。在故事板中,您可以爲每個需要充當佔位符的嵌入式控制器的控制器添加一個子視圖。給控制器一個自由形式的開關,並將其大小設置爲與添加到其他控制器的子視圖相同的大小,並取消選中「從NIB調整視圖大小」框。下面是一個例子故事板,

enter image description here

在代碼中,你需要添加在viewDidAppear控制器,並在viewDidDisappear刪除它(這樣它可以被添加到一個控制器 - 它不能同時在兩個地方)。在控制器中,您將使用開關創建控制器實例,並在所有其他控制器中獲得對同一實例的引用。因此,在第一控制器,

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    self.embed = [self.storyboard instantiateViewControllerWithIdentifier:@"SharedVC"]; 
} 

-(void)viewDidAppear:(BOOL)animated { 
    [super viewDidAppear:animated]; 
    [self addChildViewController:self.embed]; 
    [self.container addSubview:self.embed.view]; 
} 

-(void)viewDidDisappear:(BOOL)animated { 
    [super viewDidDisappear:animated]; 
    [self.embed.view removeFromSuperview]; 
    [self.embed willMoveToParentViewController:nil]; 
    [self.embed removeFromParentViewController]; 
} 

在所有其他控制器,你需要在viewDidAppear像這樣(viewDidDisappear將是相同第一控制器),

-(void)viewDidAppear:(BOOL)animated { 
    [super viewDidAppear:animated]; 
    self.embed = [(FirstViewController *)self.tabBarController.viewControllers[0] embed]; 
    [self addChildViewController:self.embed]; 
    [self.container addSubview:self.embed.view]; 
} 
相關問題