添加 TableViewController 作为子视图

Add TableViewController as SubView

使用 may App 我有 2 个 TableViewControllers InboxOutbox(每个都有自己的自定义单元格)和Main ViewController Mail 下面有一个段控制器和 UIView,我正在尝试添加 tableview 控制器并在它们之间切换段控制器被推送但它根本不起作用!

邮件 ViewController :

import UIKit

class Mail: UIViewController, SegmentControllerDelegate {

    func indexChanged(index: Int) {
        print("index\(index)")
        switch index {
        case 0:
            container.bringSubviewToFront(inbox)
            break
            case 1:
            container.bringSubviewToFront(outbox)
            break
        default:
            break
        }
    }
var inbox: UIView!
    var outbox : UIView!
    override func viewDidLoad() {
        super.viewDidLoad()

        inbox = storyboard?.instantiateViewController(withIdentifier: "inbox").view
        outbox = Outbox().view
        container.addSubview(inbox)
        container.addSubview(outbox)


    }

    override func viewDidLayoutSubviews() {
        inbox.frame = container.bounds
        outbox.frame = container.bounds


    }

这是当我的收件箱和发件箱表格视图充满数据时的结果

任何帮助将不胜感激

您应该使用控制器,而不仅仅是他们的意见。 (var outbox: Outbox 而不是 var outbox: UIView,并进行适当的初始化) 你在这里做的是创建一个发件箱控制器,获取它的视图(如果没有控制器就无法正常运行);然后发件箱控制器被释放,视图没有显示(发件箱控制器,也是视图的数据源,立即被释放)。

我还会使用 TabBarController 来管理子控制器

// Create
contentTabBarController = UITabBarController()
addChild(contentTabBarController)
contentTabBarController.viewControllers = [Inbox(), Outbox()]
// Add subview either in nib file or here; do not forget to add proper constraints as well
container.addSubview(contentTabBarController.view) 

//...

// Select inbox
contentTabBarController.selectedIndex = 0

// Select outbox
contentTabBarController.selectedIndex = 1

与其使用简单的 UIView,不如尝试使用 UIContainerView。

Apple 文档:https://developer.apple.com/library/archive/featuredarticles/ViewControllerPGforiPhoneOS/ImplementingaContainerViewController.html

您目前所做的只是从其他控制器获取 view。您需要创建视图控制器的实例并将它们保存在内存中。

这可以通过将它们添加为 child 视图控制器来完成:

    // for both inbox and outbox table view controllers,
    //  instantiate
    //  add as child view controller
    //  add its view as a subview of container
    //  finish with .didMove()

    inboxTVC = InboxTableViewController()
    addChild(inboxTVC)
    container.addSubview(inboxTVC.view)
    inboxTVC.didMove(toParent: self)

    outboxTVC = OutboxTableViewController()
    addChild(outboxTVC)
    container.addSubview(outboxTVC.view)
    outboxTVC.didMove(toParent: self)

我已经更新了我为你的其他问题整理的项目,并实现了这个:https://github.com/DonMag/AliAdil