2016-06-15 33 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