如何从嵌入在选项卡栏控制器中的 UIButton 推送 ViewController

How to push a ViewController from a UIButton that is embedded in Tab Bar Controller

想要在我的标签栏旁边有一个浮动按钮。按下时,此按钮将打开一个可以导航的视图(因此视图控制器嵌入在导航控制器中(?))。

在 UITabBarController {

ViewDidLoad() {
super.viewDidLoad()

//I have my 5 tab bar items set up programatically here.  
//The middle tab bar item is disabled because the button is on top of it

setupMiddleButton()

}

我的 setupMiddleButton 函数

let menuButton = UIButton(frame: CGRect(x: 0, y: 0, width: 52, height: 52))
//..various styling and alignment values...
view.addSubview(menuButton)
menuButton.addTarget(self, action: #selector(menuButtonAction(sender:)), for: .touchUpInside)

最后我尝试添加代码来推送视图控制器,但是当点击按钮时我收到 nil。

@objc private func menuButtonAction(sender: UIButton) {
                
let createController = CreateViewController()
let nav3 = UINavigationController(rootViewController: createController)
            
nav3.navigationController!.pushViewController(createController, animated: true)

我认为您可能向 menuButtonAction 函数传递了错误的参数,请尝试像这样更改您的代码:

func setupMiddleButton() {
    let menuButton = UIButton(frame: CGRect(x: 0, y: 0, width: 52, height: 52))
    //..various styling and alignment values...
    view.addSubview(menuButton)
    menuButton.addTarget(self, action: #selector(menuButtonAction(_:)), for: .touchUpInside)
}

...

@objc private func menuButtonAction(_ sender: UIButton) {
    ...
}

所以我想通了。事实证明它比我想象的要简单得多,这让我觉得我在这个问题上解释得不好。无论如何,这是对我有用的代码。

let myViewController = ViewController()
let nav = UINavigationController(rootViewController: myViewController)

self.present(nav, animated:true, completion: nil)