2016-06-15 39 views
0

我試圖做一個應用程序,它有一個選項卡欄視圖與2意見。第一個包含一個tableView。第二個可以將元素添加到tableView。現在我希望能夠在視圖之間進行通信標籤欄; childView segues

當切換標籤欄控制器中的選項卡時是否存在segues?我怎樣攔截他們?如果不是,這兩種視圖之間還有其他可能的交流方式嗎?

回答

0

可以使用UITabBarControllerDelegate與方法tabBarController:didSelectViewController:攔截視圖控制器之間的實際切換:

告訴用戶在標籤欄選擇的項目的委託。

有一個整潔的實現,你可以通過訪問對象庫做,搜索「對象」:

enter image description here

它拖動到標籤欄視圖控制器,並設置它的委託按ctrl +拖動。

選擇它:

enter image description here

,並在檢查器中設置的自定義類:

enter image description here

當你右擊對象,你應該看到:

enter image description here

這裏是您的CustomClass的示例:

class CustomClass : NSObject, UITabBarControllerDelegate 
{ 
    func tabBarController(tabBarController: UITabBarController, didSelectViewController viewController: UIViewController) 
    { 
    } 
} 

儘管的viewController參數是:

用戶選擇的視圖控制器。在iOS v3.0及更高版本中,這可能與已經選擇的視圖控制器相同。

這意味着您需要檢查哪個VC。

+0

我已經做到了,但tabBarController()沒有得到執行。 – Felix

+0

這正是你需要的,請記住你的VC需要是標籤欄視圖控制器。 如果回調不起作用,這意味着你沒有按照你的要求設置委託。因此,回調發生,但不是你的customClass。 我已經更新了你的對象應該如何看起來像你右鍵單擊它時的答案。 – OhadM

+0

謝謝,我自己找到了解決方案。 '讓ctrl = super.parentViewController爲! UITabBarController for ctrl.viewControllers中的saveCtrl!如果saveCtrl是SaveViewController print(「Worked」) let newSaveCtrl = saveCtrl as! SaveViewController newSaveCtrl。saveDelegate = { (NEWVALUE:字符串)在 self.Elemente.append(NEWVALUE) }} } ' – Felix

0

我想出了一個解決方案自己:

let ctrl = super.parentViewController as! UITabBarController 

    for saveCtrl in ctrl.viewControllers! { 
     if saveCtrl is SaveViewController { 
      print("Worked") 
      let newSaveCtrl = saveCtrl as! SaveViewController 
      newSaveCtrl.saveDelegate = 
       {(newValue: String) in 

        self.Elemente.append(newValue) 

       } 
     } 
    } 
+0

到底誰通話嗎?有代表嗎?你如何截取用戶的實際水龍頭? – OhadM

+0

這發生在具有tableView的VC的viewDidLoad()中。當你啓動應用程序時,這個VC顯示出來,並執行這段代碼。在我的SaveController中,將元素添加到tableView中,saveDelegate被該代碼初始化,如果我點擊保存,它將運行saveDelegate。希望你明白它:P – Felix