【问题标题】:Segue to a ViewController from a UIButton in Swift从 Swift 中的 UIButton 转到 ViewController
【发布时间】:2019-09-14 07:20:23
【问题描述】:

我有一个 TabViewController 有三个选项卡,这导致三个 ViewControllers。

我可以很好地使用 TVC 的实际标签按钮。但是,我还想使用 UIButton 转到其中一个选项卡。我在一个 ViewController 中有一个按钮,我想转到另一个,但不使用 Tab 按钮。

我已经取得了一些部分成功。部分我的意思是 VC 出现但 TabBar 不存在!

UIButton所在视图控制器的代码如下:

import UIKit

class HomeView: UIViewController {

    @IBOutlet var startBtn: UIButton! //Define the start button as a variable
    @IBOutlet var homeText: UILabel! //Define the text on the home screen

    override func viewDidLoad() {
        super.viewDidLoad()
        setBackground(); //Set background image
        setStartBtn();
        setHomeText();
    }

    func setBackground() {

        // Apply the insets…
        let backgroundImage = UIImageView(frame: UIScreen.main.bounds)
        backgroundImage.image = UIImage(named: "Background.png")
        backgroundImage.contentMode = UIView.ContentMode.scaleAspectFill
        self.view.insertSubview(backgroundImage, at: 0)
    }

    func setStartBtn() {
        let startBtnText = NSLocalizedString("Start Test", comment: "")
        startBtn.addTarget(self, action: #selector(self.clickStart(_:)), for: .touchUpInside) //Add a target and action of the start buton
        startBtn.setTitle(startBtnText, for: [])
    }

    func setHomeText() {
        let homeTextStr = NSLocalizedString("Home Text", comment: "")
        homeText.text = homeTextStr
    }

    @objc func clickStart(_ sender: UIButton) {

    }
}

解决方案:

点击开始功能看起来像我需要的(感谢下面接受的答案)。

@objc func clickStart(_ sender: UIButton) {
    self.tabBarController?.selectedIndex = 1 // 1 is the second tab
}

这让我可以从视图中的 UIButton 移动到第二个标签栏项

【问题讨论】:

    标签: ios swift uibutton uitabbarcontroller segue


    【解决方案1】:

    您需要将每个 vc 嵌入到 navigationController 内的选项卡中,然后使用它导航到嵌套的 vc

    @objc func clickStart(_ sender: UIButton) { 
       let vc = self.storyboard!.instantiateViewController(withIdentifier: "VCID") // set id for the destination vc
       self.navigationController?.pushViewController(vc,animated:true) 
    }
    

    这将导航到选项卡内的另一个 vc

    self.tabBarController?.selectedIndex = 1 // 1 is the second tab
    

    【讨论】:

    • 我找到了编辑器 --> 嵌入功能,所以这已经完成并且确实有效。但是,当新 VC 出现时,TAB 栏仍然突出显示原始 VC。要展开,左侧标签栏按钮用于主屏幕。我要选择的 VC 是中间的选项卡按钮。出现 VC,但选项卡栏不反映更改。有什么想法吗?
    • 您是否需要以编程方式更改选项卡内的当前 vc?如果是这样,则使用self.tabBarController?.selectedIndex = 1 在这种情况下无需推送,推送是您需要显示另一个嵌套的vc
    • 宾果游戏,这就是我所追求的!谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-13
    • 1970-01-01
    • 1970-01-01
    • 2019-09-20
    • 1970-01-01
    相关资源
    最近更新 更多