方案: 我有一個主視圖控制器,從該視圖控制器我已經放置了3個按鈕和3個容器視圖。對於每個按鈕點擊我已啓用適當的容器。在這裏,我有家,關於我們和我們聯繫,從家裏我需要去聯繫我們的容器視圖。如何從另一個容器訪問容器視圖
如何從家庭容器視圖控制器啓用「聯繫我們」容器視圖?
歡迎更多有價值的答案,謝謝你在前進。
方案: 我有一個主視圖控制器,從該視圖控制器我已經放置了3個按鈕和3個容器視圖。對於每個按鈕點擊我已啓用適當的容器。在這裏,我有家,關於我們和我們聯繫,從家裏我需要去聯繫我們的容器視圖。如何從另一個容器訪問容器視圖
如何從家庭容器視圖控制器啓用「聯繫我們」容器視圖?
歡迎更多有價值的答案,謝謝你在前進。
你可以做到以下幾點:
1)在Interface Builder創建你的容器視圖控制器的UIViewController(子類)的自定義類,並設置類容器視圖控制器是你的自定義子類。
2)在自定義容器視圖控制器類中實現一些API以管理其子級。也許像- (void)switchToAboutVC
和類似的東西(他們應該打電話performSegueWithIdentifier:sender:
)。 3)在您的子視圖控制器(如about,contact us等)中,您可以訪問父視圖控制器並進行切換,因此它看起來像[(MyCustomContainerController*)[self parentViewController] switchToAboutVC]
。
PS在MVC模式中這樣做很好,只要確保正確的對象管理VC層次結構 - 在這種情況下,這是您的自定義容器控制器。這與您如何使用導航控制器非常相似,除了每個子視圖控制器都有一個屬性以獲取其父導航控制器而無需手動在視圖控制器層次結構中搜索它。
我的解決方案是定義控制器中的函數來操縱你的容器視圖。在每個視圖中,您始終可以使用適當的參數調用viewController函數以修改或訪問另一個視圖。
例如:
在UIViewController中:
//public function !
-(void)modifyContainer1() {
//place here code to modify container 1
}
//public function !
-(void)modifyContainer2() {
//place here code to modify container 1
}
,並在你的容器,只要致電:
[self.viewController modifyContainer1];
//etc.
,或者如果你想回到容器1直接調用函數:
-(UIContainerView*)getContainer1 {
//return self.container1
}
這樣做不太好,U R打破了MVC設計模式。 ü更好地通過NSNotificationCenter
你的容器視圖之間的連接:
[[NSNotificationCenter defaultCenter] addObserver:<your_controller>
selector:@selector(method)
name:@"name_of_notification"
object:<any_linear_object_u_want>];
現在發件人將發佈NSNotificationCenter:
[[NSNotificationCenter defaultCenter] postNotificationName:@"name_of_notification" object:<any_linear_object_u_want>];
對此的使用通知有點類似於使用單例,所以它可能更糟糕。如果你有幾個這樣的容器,並且他們都在聽通知? – egdmitry
它的工作fine.but有switchviewcontrollrer { _cont_home一些問題.-(無效) .hidden = YES; _cont_aontact_Us.hidden = YES; _cont_aboutUs。hidden = NO;},在這個performSegueWithIdentifier中:sender:只在加載這個主視圖控制器的時候才調用,如何通過假設一個值來聯繫我們的view-controller容器? –
是的,在這我想從parentviewcontroller傳遞給子視圖控制器的值,所以我嘗試performSegueWithIdentifier:發件人:,它只調用一次在主視圖controller.so負載如果假設我想通過一個來自視圖控制器的數據,假設在這種情況下,我從.--(void)switchviewcontrollrer這個方法傳遞給子視圖控制器,ow我可以傳遞一個值給那個子視圖控制器容器? –
您如何期待在使用'performSegueWithIdentifier:sender:'時傳遞數據?你正在使用'prepareForSegue'方法嗎?這也取決於你想傳遞什麼樣的數據。通常您只需通過訪問子視圖控制器上的setter來設置必要的數據。我懷疑爲什麼'performSegueWithIdentifier:sender:'不起作用的原因是因爲所有3個VC都已經在層次結構中,並且您只是操縱視圖來隱藏/顯示特定的視圖控制器。更好的解決方案是在視圖層次結構中刪除/添加這些VC的視圖。 – egdmitry