Swift 以编程方式在一个UIVIewController中添加两个UITableView,并希望使用UISegmentedControl更改控制器的视图

Swift 以编程方式在一个UIVIewController中添加两个UITableView,并希望使用UISegmentedControl更改控制器的视图,swift,uitableview,uisegmentedcontrol,Swift,Uitableview,Uisegmentedcontrol,我想基于2个带有segmentedControl的表格视图更改ViewController的视图。我已经用程序化的方法实现了这一目标。我创建了两个TableView和一个SegmentedControl。但是,当我更改segmentedControl时,它保持在相同的索引上,但更改了视图。我必须在每个片段上点击两次才能到达它。为什么会这样 这是我的密码: class ViewController: UIViewController { override func viewDidLoad

我想基于2个带有segmentedControl的表格视图更改ViewController的视图。我已经用程序化的方法实现了这一目标。我创建了两个TableView和一个SegmentedControl。但是,当我更改segmentedControl时,它保持在相同的索引上,但更改了视图。我必须在每个片段上点击两次才能到达它。为什么会这样

这是我的密码:

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        configureFirstTableView()
    }

    var firstTableView = UITableView()
    var secondTableView = UITableView()

    func configureFirstTableView() {
        firstTableView.frame = self.view.frame
        firstTableView.delegate = self
        firstTableView.dataSource = self

        firstTableView.register(UITableViewCell.self, forCellReuseIdentifier: "FirstCell")
        view.addSubview(firstTableView)
    }

    func configureSecondTableView() {
        secondTableView.frame = self.view.frame
        secondTableView.delegate = self
        secondTableView.dataSource = self

        secondTableView.register(UITableViewCell.self, forCellReuseIdentifier: "SecondCell")
        view.addSubview(secondTableView)
    }

    func configureSegmentedControl() -> UISegmentedControl {
        let segmentedControl = UISegmentedControl(frame: CGRect(x: 10, y: 5, width: view.frame.width - 10, height: 30))
        segmentedControl.insertSegment(withTitle: "First", at: 0, animated: false)
        segmentedControl.insertSegment(withTitle: "Second", at: 1, animated: false)
        segmentedControl.selectedSegmentIndex = 0

        segmentedControl.addTarget(self, action: #selector(changeSegmentedControlValue(_:)), for: .valueChanged)
        return segmentedControl
    }

    @objc func changeSegmentedControlValue(_ sender: UISegmentedControl) {
        switch sender.selectedSegmentIndex {
        case 0:
            print("1")
            configureFirstTableView()
        case 1:
            print("2")
            configureSecondTableView()
        default:
            break
        }
    }

}

extension ViewController: UITableViewDelegate, UITableViewDataSource {
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        var count: Int?
        if tableView == firstTableView {
            count = 3
            return count!
        } else if tableView == secondTableView {
            count = 4
            return count!
        }

        return count!
    }

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        if tableView == firstTableView {
            let cell = tableView.dequeueReusableCell(withIdentifier: "FirstCell", for: indexPath)
            cell.textLabel?.text = "First"
            return cell
        } else if tableView == secondTableView {
            let cell = tableView.dequeueReusableCell(withIdentifier: "SecondCell", for: indexPath)
            cell.textLabel?.text = "Second"
            return cell
        }
        return UITableViewCell()
    }

    func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
        let v = UIView()
        v.backgroundColor = .white
        v.addSubview(configureSegmentedControl())
        return v
    }

}


使用一个表视图。只要在数据段更改时更新数据源/委托即可。@rmaddy。问题是我需要4个tableVIew,它们将具有自定义tableVIew单元格。其中两个将具有tableviewCell,其中两个将在tableviewCell中具有collectionVIew。这就是为什么我在一个VIewController中需要非常不同的数据,我想用分段控件更改TableView。我无法用一个tableView解决我的问题