Добавить TableViewController в качестве SubView - PullRequest
0 голосов
/ 15 марта 2020

С приложением «Возможно» у меня есть 2 TableViewControllers Входящие и Исходящие (каждый со своими собственными ячейками) и Main ViewController Mail с контроллером сегментов и UIView ниже это то, что я пытаюсь добавить контроллеры таблиц и переключаться между ними на контроллере сегментов, но он не работает вообще!

Mail 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


    }

И это результат в то время как мое табличное представление Входящие и Исходящие заполнено данными

enter image description here

Любая помощь будет высоко ценится

Ответы [ 3 ]

1 голос
/ 15 марта 2020

вместо того, чтобы использовать простой UIView, попробуйте использовать UIContainerView.

документ от Apple: https://developer.apple.com/library/archive/featuredarticles/ViewControllerPGforiPhoneOS/ImplementingaContainerViewController.html

1 голос
/ 15 марта 2020

Все, что вы в настоящее время делаете, получает view от других контроллеров. Вам необходимо создать экземпляр контроллеров представления и сохранить их в памяти.

Это можно сделать, добавив их как дочерние контроллеры представления:

    // 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

0 голосов
/ 15 марта 2020

Вы должны использовать контроллеры , а не только их представления. (var outbox: Outbox вместо var outbox: UIView, с правильной инициализацией) То, что вы делаете здесь, - это создание контроллера исходящих сообщений с его видом (который не может работать должным образом, не имея контроллера); затем контроллер Outbox освобождается, и представлению нечего показывать (контроллер Outbox, который также является источником данных представления, сразу освобождается).

Также я бы использовал 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...