我既不是iOS开发人员,也不是敏捷开发人员,但请忍受以下内容:
我目前正在尝试实现一个简单的iOS应用,但在理解应该如何为这些UIView设置自定义UIView和ViewController方面遇到困难。
我正在使用UIScrollView,其中包含的项目比仅图像要复杂一些,这就是我使用自定义视图的目的。 我所做的是:
现在,我需要一个ViewController来在渲染类时控制该类(例如,对变化的textField
做出反应)。
我无法从我的主ViewController管理所有内容,因为它会变得太大(例如3个scrollViews * 5个需要管理的子视图)。
我想要一个为每个子视图使用ViewControllers的解决方案(以防它们本身也有子视图)。
我该怎么做?
我需要添加某种childViewController吗?
我真的很茫然,大多数博客文章和SO示例都无法正常工作和/或已过时,而且我不确定是否将整个View-ViewController模式弄错了。
答案 0 :(得分:0)
假设您有两个视图控制器MainViewController
和TableViewController
。 TableVC的主视图将成为MainVC的主视图的子视图。另外,您希望返回到MainVC,在TableVC中选择了哪个单元格。
一种解决方案是(a)使TableVC成为MainVC的子级,(b)使MainVC成为TableVC的委托。
TableViewController:
protocol TableVCDelegate {
func cellSelected(sender: TableViewController)
}
class TableViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {
// please note that you can do delegation differently,
// this way results in crashes if delegate is nil!
var delegate:TableVCDelegate! = nil
var someValue = ""
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
// set someValue to contents in the selected cell or it's data source
someValue = "Hello World!"
delegate.cellSelected(sender: self)
}
}
MainViewController:
class MainViewController: UIViewController, TableVCDelegate {
let tableVC = TableViewController()
override func viewDidLoad() {
// make tableVC be a child of this VC
addChild(tableVC)
tableVC.didMove(toParent: self)
tableVC.delegate = self
// position tableVC.view
tableVC.view.translatesAutoresizingMaskIntoConstraints = false
}
func cellSelected(sender: TableViewController) {
print(sender.someValue) // this should send "Hello World!" to the console
}
}
这显然是未经测试的代码,但是它基于产品代码。这将是帮助您入门的外壳。