UITabBar控制器显示第二个选项卡的ViewController没有Segue

时间:2017-04-21 09:11:30

标签: ios iphone swift3 uitabbarcontroller presentviewcontroller

我完全从我的应用中删除了故事板。如何呈现链接到TabBarController的第二个选项卡的VC。

Setup: mainVC ---  myTabBar -- tab1 - navCntrl - VC1
                               tab2 - navCntrl - VC2

使用segues时,我使用了以下代码:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if (segue.identifier == myTabBar) {
       let tabVC = segue.destination as? UITabBarController {
            tabVC.selectedIndex = myTabBarIndex   ==> 1 to reach VC2
    }
    // other other stuff
}

为了消除segues我重写了上面的内容但是虽然我设置了selectedIndex VC2但没有呈现。有什么建议?

    func vc2Btn() {

       let tabVC = MyTabBar()
       tabVC.selectedIndex = 1    // ==>> Index set but can not reach VC2

       present(tabVC, animated: true, completion: nil)
    }

我的测试系统的完整代码:

class MyTabBar: UITabBarController, UITabBarControllerDelegate {

override func viewDidLoad() {
    super.viewDidLoad()

    self.delegate = self
}

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)

    // Create Tab 1
    let navCtrlTab1 = UINavigationController(rootViewController: VC1())

    let tabOne = navCtrlTab1
    let tabOneBarItem = UITabBarItem(title: "", image: StyleKit.imageOfIconTabRecent, selectedImage: StyleKit.imageOfIconTabRecentRev)

    tabOne.tabBarItem = tabOneBarItem

    // Create Tab 2
    let navCtrlTab2 = UINavigationController(rootViewController: VC2())

    let tabTwo = navCtrlTab2
    let tabTwoBarItem = UITabBarItem(title: "", image: StyleKit.imageOfIconTabNote, selectedImage: StyleKit.imageOfIconTabNoteRev)

    tabTwo.tabBarItem = tabTwoBarItem

    self.viewControllers = [tabOne, tabTwo]
}
}


class mainVC: UIViewController {

let btn0: UIButton = {
    let button = UIButton()
    button.setBackgroundImage(StyleKit.imageOfBtnBlue(btnText: "VC1"), for: UIControlState.normal)
    button.addTarget(self, action:#selector(vc1Btn), for: .touchUpInside)
    return button
}()

let btn1: UIButton = {
    let button = UIButton()
    button.setBackgroundImage(StyleKit.imageOfBtnBlue(btnText: "VC2"), for: UIControlState.normal)
    button.addTarget(self, action:#selector(vc2Btn), for: .touchUpInside)
    return button
}()

override func viewDidLoad() {
    super.viewDidLoad()

    self.view.addSubview(btn0)
    self.view.addSubview(btn1)

    addConstraintsWithFormat("H:|-100-[v0]", views: btn0)
    addConstraintsWithFormat("H:|-100-[v0]", views: btn1)
    addConstraintsWithFormat("V:|-300-[v0]-20-[v1]", views: btn0, btn1)
}

func addConstraintsWithFormat(_ format: String, views: UIView...) {
    var viewsDictionary = [String: UIView]()
    for (index, view) in views.enumerated() {
        let key = "v\(index)"
        viewsDictionary[key] = view
        view.translatesAutoresizingMaskIntoConstraints = false
    }
    self.view.addConstraints(NSLayoutConstraint.constraints(withVisualFormat: format, options: NSLayoutFormatOptions(), metrics: nil, views: viewsDictionary))
}

func vc1Btn() {

    let tabVC = MyTabBar()
    tabVC.selectedIndex = 0    // ==>> this is working

    present(tabVC, animated: true, completion: nil)
}

func vc2Btn() {

    let tabVC = MyTabBar()
    tabVC.selectedIndex = 1    // ==>> Index set but can not reach VC2

    present(tabVC, animated: true, completion: nil)
}
}

class VC1: UIViewController {

override func viewDidLoad() {
    super.viewDidLoad()

    navigationItem.title = "VC1"
    print ("VC1")
}
}

class VC2: UIViewController {

override func viewDidLoad() {
    super.viewDidLoad()

    navigationItem.title = "VC2"
    print ("VC2")
}
}

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {

var window: UIWindow?

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {

    window = UIWindow(frame: UIScreen.main.bounds)
    window?.makeKeyAndVisible()
    window?.rootViewController = mainVC()

    return true
}
}

0 个答案:

没有答案