Смешанные программы c и раскадровка. Нажатие кнопки не откроет следующий V C в контроллере навигации - PullRequest
0 голосов
/ 05 мая 2020

У меня есть контроллер панели вкладок, созданный программно. И это выглядит примерно так:

class NewTabBarController: UITabBarController {

override func viewDidLoad() {
        super.viewDidLoad()

        self.delegate = self

        createTabbar()
    }

func createTabbar() {
let deliveryViewController = storyBoard.instantiateViewController(identifier: "DeliveryViewController") as? DeliveryViewController
        deliveryViewController?.tabBarItem.image = #imageLiteral(resourceName: "icon_deliver")
        deliveryViewController?.title = "Delivery"
        planDictionary["planType"] = Constants.Mealplan.deliveryPlan
        deliveryViewController?.planDictionary = planDictionary

// Excluded other tabs and view controller creations since they are the same
}

Теперь этот DeliveryViewController создан в раскадровке и встроен в контроллер навигации

У него есть кнопка Действие щелчка:

@IBAction func saveNameButton(_ sender: UIButton) {



let addressViewController = storyBoard.instantiateViewController(identifier: "AddressViewController") as? AddressViewController
                addressViewController?.planDictionary = planDictionary
                navigationController?.pushViewController(addressViewController!, animated: true)
}

Действие нажатия кнопки работало, когда панель вкладок находилась в раскадровке. Но после программного рефакторинга следующий V C не помещается в стек навигации.

Помощь будет принята с благодарностью.

1 Ответ

1 голос
/ 06 мая 2020

Почти наверняка ...

Эта строка:

let deliveryViewController = storyBoard.instantiateViewController(identifier: "DeliveryViewController") as? DeliveryViewController

Создает экземпляр DeliveryViewController и устанавливает его в качестве контроллера представления для вкладки. Но что вы хотите, чтобы сделал, так это загрузить UINavigationController и сделать DeliveryViewController контроллер представления root этого NavController и установить этот NavController как элемент Tab.

...