【问题标题】:Add TableViewController as SubView将 TableViewController 添加为子视图
【发布时间】:2020-06-26 17:31:55
【问题描述】:

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

邮件视图控制器:

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


    }

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

任何帮助将不胜感激

【问题讨论】:

    标签: ios swift addsubview


    【解决方案1】:

    您应该使用控制器,而不仅仅是他们的视图。 (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
    

    【讨论】:

      【解决方案2】:

      您当前所做的只是从其他控制器获取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

      【讨论】:

        【解决方案3】:

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多