我有一个带有容器视图的视图控制器,其中嵌入了一个选项卡栏控制器。我使用这个来显示3个不同的视图控制器,基于什么是压从一个分段控制在主vc。我一直在遵循这个解决方案:https://stackoverflow.com/a/38283669/11536234
我的问题是,当我更改分段控制索引(通过按不同的分段)时,我无法理解如何“达到”准备功能。

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    print("prepare reached")

    //super.prepare(for: segue, sender: sender)
    //switch(segue.identifier ?? "") {
    //case "TabBar":

        guard let TabController = segue.destination as? UITabBarController else {
            fatalError("Unexpected destination: \(segue.destination)")
        }

        TabController.selectedIndex = toggle.selectedSegmentIndex

    //default:
        //fatalError("Unexpected Segue Identifier; \(segue.identifier)")
    //}
}

@IBAction func toggleAction(_ sender: UISegmentedControl) {
    print("toggle is now at index: ", toggle.selectedSegmentIndex)
    //performSegue(withIdentifier: "TabBar", sender: sender)
    //container.bringSubview(toFront: views[sender.selectedSegmentIndex])
}

到目前为止,我已经尝试在链接到分段控件的操作函数中放置performsegue函数。但是,这不起作用,因为它实际上是以编程方式添加了另一个嵌入的选项卡栏,或者再次调用嵌入的segue,我收到一条错误语句:“容器视图中有意外的子视图。可能嵌入的segue已经触发过一次,或者子视图是以编程方式添加的?”
*注释的代码行显示了我所做的与我所处的位置相比没有起作用的尝试。

最佳答案

当您从另一个视图控制器(MainVC)将视图控制器嵌入到容器视图时,当MainVC加载时,segue只执行一次。要将值传递给嵌入式UIViewController/UITabBarController,需要获取child视图控制器并发送数据

class MainVC: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
    }
    @IBAction func segmentControlAction(_ sender: UISegmentedControl) {
        if let tabBarVC = self.children.first(where: { $0 is UITabBarController }) as? UITabBarController {
            tabBarVC.selectedIndex = sender.selectedSegmentIndex
        }
    }
    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        //called before mainvc viewDidLoad
        let destinationVC = segue.destination as? UITabBarController
        destinationVC?.selectedIndex = 1
    }
}

ios - 无法“到达”我的覆盖准备功能以编程方式更改选项卡栏 Controller 中的 View-LMLPHP

关于ios - 无法“到达”我的覆盖准备功能以编程方式更改选项卡栏 Controller 中的 View ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56246814/

10-10 20:55