【发布时间】:2016-05-31 12:29:23
【问题描述】:
因此,我是 iOS 新手,但对 Android 经验丰富,我开始掌握大部分内容的要点,但我很难理解去哪里,为什么会这样......
当你只使用故事板时,很容易实现 MVC 模式(或任何其他视图分离模式),但当你用代码编写所有内容时,我觉得它变得有点混乱。
假设我有一个 ViewController,其父 View 包含子 View,它可能又包含子 View。现在我应该在哪里创建孩子?在 ViewController 中(最方便)还是在父 View 中(最近)?
如果我使用 ViewController 我有参考,我会很容易制作插座等,但是 ViewController 是否也应该做一些事情,比如 setTitle、setImage、背景等等等?这绝对是最简单的解决方案。缺点是 View 只是简单的对象,这会导致 ViewController 变得臃肿。
如果我使用 View,我将很难将 outlets 返回给 ViewController,而 ViewController 最终几乎什么都不做。
Apple 也没有太大帮助,官方 FoodTracker 教程显示了 ViewController 和 Views using outlets 等。
我现在的基本结构:
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)
}
}
非常感谢所有带有示例的解释,如果我不够清楚,我很乐意进一步解释。
【问题讨论】:
标签: ios swift model-view-controller