为.xib视图设置ViewController

问题描述 投票:0回答:1

我不是iOS开发人员,也不是快速的开发人员,但请耐心等待:

我目前正在尝试实现一个简单的iOS应用程序,但我很难理解我应该如何为那些UIViews设置自定义UIViews和ViewControllers。

我使用的UIScrollView包含的项目比图像更复杂,这就是我使用自定义视图的内容。我做的是:

  • 我创建了一个.xib文件,视图本身。我添加了一些元素(这里只是一个文本字段,为了简单起见)。
  • 我创建了一个继承自UIView的可可触摸类“CustomView”,并将我的视图设置为该类(在类中我只是设置元素等)。

created the view and the corresponding "CustomView" class

view is now of type "CustomView"

现在我想要一个ViewController,它在渲染时控制类(例如对更改的textField作出反应)。我无法管理来自我的主ViewController的所有内容,因为它会变得太大(例如需要管理的3个scrollViews * 5子视图)。我想要一个为每个子视图使用ViewControllers的解决方案(如果他们自己也有子视图)。

我怎么做?

我需要添加某种childViewController吗?

我真的很茫然,大多数博客帖子和SO示例根本不起作用和/或过时,我不确定我是否得到了整个View - ViewController模式错误。

ios swift uiviewcontroller xib
1个回答
0
投票

假设你有两个视图控制器,MainViewControllerTableViewController。 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
    }
}

这显然是未经测试的代码,但它基于产品代码。这是一个帮助您入门的shell。

© www.soinside.com 2019 - 2024. All rights reserved.