我有一个代表我称之为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
}
我无法让这个工作,并欢迎您的意见/答案
答案 0 :(得分:0)
您可以使用以下方法访问标签栏的视图控制器:
let viewController = self.tabBarController?.viewControllers?[1] as? SelectALogoViewController
viewController?.delegate = self
或者另一种选择是直接调用您的方法并完全删除委托/协议语法:
let viewController = self.tabBarController?.viewControllers?[1] as? SelectALogoViewController
viewController?.doSomething()