按下特定选项卡时设置委托

时间:2015-01-17 21:07:34

标签: swift delegates uitabbarcontroller

我有一个代表我称之为logoSelectionDelegate。代表有一个功能来指示用户是否更改了他们的徽标。

func userDidChangeLogo(image1: UIImage) {
    pickedImage = image1
}

我曾经使用prepareForSegue函数设置委托,如下所示:

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    if segue.identifier == "SettingsIdentifier" {
        let viewController:SelectALogoViewController = segue.destinationViewController as SelectALogoViewController
        viewController.delegate=self

        if pickedImage != nil {

            viewController.pickedImage = pickedImage
        }



    }
}

这很好,但是,现在我已经改为Tabbed应用程序,我想在"设置"时设置logoSelectionDelegate。选项卡已按下。现在我不确定如何做到这一点,我将我的TabBarController设置为logoSelectionDelegate,在TabBarController.swift文件中实现我的委托函数,然后使用didSelectViewController方法尝试设置logoSelectionDelegate,如下所示:

 func tabBarController(tabBarController: UITabBarController, didSelectViewController viewController: UIViewController) -> Bool {

    if (tabBarController.selectedIndex == 1) {

        let viewController:SelectALogoViewController! = viewController as? SelectALogoViewController
        viewController.delegate=self

        if pickedImage != nil {

            viewController.pickedImage = pickedImage
        }

        println("Yes")
    }



    return true



}

我无法让这个工作,并欢迎您的意见/答案

1 个答案:

答案 0 :(得分:0)

您可以使用以下方法访问标签栏的视图控制器:

let viewController = self.tabBarController?.viewControllers?[1] as? SelectALogoViewController
    viewController?.delegate = self

或者另一种选择是直接调用您的方法并完全删除委托/协议语法:

let viewController = self.tabBarController?.viewControllers?[1] as? SelectALogoViewController
    viewController?.doSomething()