从标签栏控制器

时间:2015-12-08 19:42:29

标签: ios swift

我想从标签栏项目启动segue。当用户触摸标签栏上的项目时。我想推出一个赛格。

要做到这一点,我写了这段代码:

class TabBarController: UITabBarController, UITabBarControllerDelegate {

    @IBOutlet var tabs: UITabBar!

    override func viewDidLoad() {
        super.viewDidLoad()

        // Do any additional setup after loading the view.
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }


    override func tabBar(tabBar: UITabBar, didSelectItem item: UITabBarItem) {
        if item.tag == 3 {
            self.performSegueWithIdentifier("test123", sender: self)
        }
    }
}

实际上除了问题之外它运作良好。这是启动segue但也切换选项卡。我不想要这个。它应该只是启动启动segue不应该切换选项卡。

如何防止此问题?

1 个答案:

答案 0 :(得分:1)

这是让代码工作的最小变化

viewDidLoad()添加

self.delegate = self

然后实现委托方法

func tabBarController(tabBarController: UITabBarController, shouldSelectViewController viewController: UIViewController) -> Bool {
    let shouldSelectIndex = tabBarController.viewControllers?.indexOf(viewController)
    if shouldSelectIndex == 2
    {
        self.performSegueWithIdentifier("test123", sender: self)
        return false
    }
    return true
}

这应该有效。

但我觉得你有设计问题。

  1. 作为代表的子类很奇怪。更好的单独代表。
  2. 使用内省或其他代表团或其他东西而不是标签/凹痕