所以我是新的iOS但經驗豐富的Android和我開始獲得大多數東西的主旨,但我很難理解什麼去哪裏,爲什麼它是這樣的...Swift的iOS代碼結構,所有代碼在哪裏?
當你只使用故事板很容易實現MVC模式(或任何其他視圖分離模式),但是當您將代碼中的所有內容製作出來時,我感覺它會變得雜亂無章。
比方說,我有一個ViewController與父視圖包含子視圖,其中可能包含子視圖。現在我應該在哪裏創建孩子?在ViewController(最方便)還是在父視圖(最近)?
如果我使用的ViewController我有參考,我會有一個容易的時間做網點等,但應該ViewController然後也做像setTitle,setImage,背景等東西?這絕對是最簡單的解決方案。缺點是Views僅僅是造成ViewController變得臃腫的對象。
如果我使用視圖,我很難將視點返回給ViewController,而ViewController最終將不會做任何事情。
蘋果是沒有太大的幫助,這時三OFFICIEL FoodTracker教程同時顯示視圖控制器,並使用插座等等,等等瀏覽
基本結構,我現在:
updateLayoutStates()
setupLayoutPositions()
updateLayoutPositions()
...
/// Setups the initial constraints for all views
func setupLayoutPositions() {
// add views by order of appearances
addSubview(languageBtn)
addSubview(playBtn)
addSubview(menuBtn)
//addSubview(barScrollOverlayView)
addSubview(barScrollView)
addSubview(collapseBtn)
// add bar scroll inner subviws by order of appearance
barScrollView.addSubview(barScrollContentView)
barScrollContentView.addSubview(speedContainerView)
barScrollContentView.addSubview(speedProgress)
barScrollContentView.addSubview(readingStratBtn)
// More code that adds constraints etc. etc.
...
/**
Updates all views based on the current status of the bar
*/
func updateLayoutStates() {
print("Bar updateLayoutStates")
// setup base layout
// setup permanent items, listed by appearance
languageBtn.backgroundColor = UIColorFromHex(Constants.Colors.dark_blue, alpha: 1)
languageBtn.setTitle("lang_da".localized, forState: .Normal)
languageBtn.postSetup()
languageBtn.setTitleColor(UIColorFromHex(Constants.Colors.white, alpha: 1), forState: .Normal)
playBtn.setImage(UIImage(named: "Play"), forState: .Normal)
playBtn.setImage(UIImage(named: "PlayActive"), forState: .Highlighted)
playBtn.setTitle("label_play_key".localized, forState: .Normal)
playBtn.postSetup()
...
/// updates the positions of all layouts based on the current status of the bar
func updateLayoutPositions() {
if currentBarState == BarState.EnabledStandardExpanded {
self.removeConstraint(collapseLeftConstraint)
self.addConstraint(collapseRightConstraint)
} else if currentBarState == BarState.EnabledStandardCollapsed {
self.removeConstraint(collapseRightConstraint)
self.addConstraint(collapseLeftConstraint)
}
}
舉例所有的解釋是非常感謝,如果我還不夠清楚,我會很樂意進一步解釋。
謝謝,我開始了來更好地理解一切。此外,我已經意識到這沒有人回答:)。從Android的角度來看,我猜ViewController與Fragment類似。在Android中,只要您在代碼中執行UI,而不是在xml中,就可以隨心所欲地搞定所有內容。 – Warpzit
是的。可以說,ViewController就像Android中的Activity或Fragment。我希望你能理解「視圖控制器遏制」的含義。如果沒有:https://developer.apple.com/library/ios/featuredarticles/ViewControllerPGforiPhoneOS/ImplementingaContainerViewController.html – orschaef
是的,這已經是我決定去的方法。我已經開始了一個簡單的視圖,這個視圖變得越來越複雜,在這一點上我意識到它是一個子視圖控制器:)但正如你所說的,我們仍然可以這樣編碼,這不是一個好方法。 – Warpzit