我試圖做一個應用程序,它有一個選項卡欄視圖與2意見。第一個包含一個tableView。第二個可以將元素添加到tableView。現在我希望能夠在視圖之間進行通信標籤欄; childView segues
當切換標籤欄控制器中的選項卡時是否存在segues?我怎樣攔截他們?如果不是,這兩種視圖之間還有其他可能的交流方式嗎?
我試圖做一個應用程序,它有一個選項卡欄視圖與2意見。第一個包含一個tableView。第二個可以將元素添加到tableView。現在我希望能夠在視圖之間進行通信標籤欄; childView segues
當切換標籤欄控制器中的選項卡時是否存在segues?我怎樣攔截他們?如果不是,這兩種視圖之間還有其他可能的交流方式嗎?
可以使用UITabBarControllerDelegate與方法tabBarController:didSelectViewController:攔截視圖控制器之間的實際切換:
告訴用戶在標籤欄選擇的項目的委託。
有一個整潔的實現,你可以通過訪問對象庫做,搜索「對象」:
它拖動到標籤欄視圖控制器,並設置它的委託按ctrl +拖動。
選擇它:
,並在檢查器中設置的自定義類:
當你右擊對象,你應該看到:
這裏是您的CustomClass的示例:
class CustomClass : NSObject, UITabBarControllerDelegate
{
func tabBarController(tabBarController: UITabBarController, didSelectViewController viewController: UIViewController)
{
}
}
儘管的viewController參數是:
用戶選擇的視圖控制器。在iOS v3.0及更高版本中,這可能與已經選擇的視圖控制器相同。
這意味着您需要檢查哪個VC。
我想出了一個解決方案自己:
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)
}
}
}
我已經做到了,但tabBarController()沒有得到執行。 – Felix
這正是你需要的,請記住你的VC需要是標籤欄視圖控制器。 如果回調不起作用,這意味着你沒有按照你的要求設置委託。因此,回調發生,但不是你的customClass。 我已經更新了你的對象應該如何看起來像你右鍵單擊它時的答案。 – OhadM
謝謝,我自己找到了解決方案。 '讓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