我试图做一个应用程序,它有一个选项卡栏视图与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