2015-12-08 148 views
0

我想從標籤欄項目啓動segue。當用戶觸摸標籤欄上的項目時。我想推出一個賽格。從標籤欄控制器啓動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不應該切換選項卡。

如何防止此問題?

+0

附加item.enabled =假在你的if語句 – Nakib

+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. 相反標籤/ indecies使用內省或者其他委託或東西
+0

我得到編譯器錯誤:類型CameraController的值沒有成員'委託' –

+0

我的意思是類TabBarController的viewDidLoad,我也更新了代碼 –