如何以编程方式打开视图控制器的某些选项卡

时间:2018-01-30 13:08:13

标签: ios swift tabs tabbed-view

我正在编写一个代码,其中我有一个带有某些选项卡的视图控制器。在解除警报后,我想自动打开第二个标签。为此,我在发出此警告时发布了本地通知。该通知的观察者在家庭视图控制器中,当调用该观察者时,选择视图控制器的第二个选项卡。这是我的代码,以便更好地理解:

vc.dismiss(animated: true, completion: { 
// vc is the view controller in which my custom alert is shown

NotificationCenter.default.post(name: NSNotification.Name.OpenConsumerTab, 
                                    object: ConsumerHomeTab.Stats.rawValue)
})

和家庭视图控制器:(问题相关代码)

NotificationCenter.default.addObserver(self,
                                       selector: #selector(onOpenConsumerTabNotificationRecieved(notification:)),
                                       name: Notification.Name.OpenConsumerTab,
                                       object: nil)

@objc public func onOpenConsumerTabNotificationRecieved(notification: Notification) {

    if (notification.object as! Int == ConsumerHomeTab.Stats.rawValue)
    {
        selectedIndex = 1
    }
}

这是打开标签但是我得到的输出是这样的:(得到一个额外的黑条)

enter image description here

为什么会这样?也许它出现了一个全新的家庭视图控制器(带标签栏)但是原因是什么?如果我错了,请纠正我,因为我是iOS的新手。

我尝试过的事情:

  • 获取根视图控制器(主视图控制器)并选择它 选项卡但输出相同。

  • 使用pop视图控制器,但它会打开第一个标签(索引0),但是我的 要求是打开第二个标签(索引1)

2 个答案:

答案 0 :(得分:2)

我认为也没有必要使用通知中心,你可以在解雇VC时编写这段代码

取消你的提醒

 alert.dismissWithClickedButtonIndex(-1, animated: true)

更改View-Controller:

 self.tabBarController?.selectedIndex = selectedTabIndex 


 // selectedTabIndex is the index of ViewController which you want to select

答案 1 :(得分:0)

请使用tabbarController实例将所选索引设置为,可能是您没有使用tabbar控制器实例来设置索引:

if let tababarController = self.window!.rootViewController as! UITabBarController? { tababarController.selectedIndex = 1
}