我将Xcode 6
与swift
一起使用。
我正在尝试将image / UIImage
从UITabBarController
传递到其中一个子视图(标签)。 Image本身正在使用loadImage函数传递给UITabBarController
(在prepareForSegue
期间由另一个UIViewController调用它)。
//this is the tab bar controller
class DesignerTabBarController : UITabBarController{
var pickedImage : UIImage = UIImage() //empty image
var VC1: DesignerTabController = DesignerTabController.alloc()
func loadImage(passedImage: UIImage){
pickedImage = passedImage
println(pickedImage) // image is accessible from here
}
override func viewDidLoad() {
super.viewDidLoad()
println(pickedImage) //image is accessible from here
VC1.pickedImageView.image = pickedImage // this line gives "unexpectedly found nil when unwrapping optional"
}
}
//this is the `UIViewcontroller` I want display the image (inside pickedImageView)
class DesignerTabController : UIViewController{
@IBOutlet weak var pickedImageView: UIImageView!
}
我意识到我将图像从UITabBarController
传递到子视图的方式不起作用,即使Xcode中没有显示语法错误(当我开始输入时它建议pickImageView所以我认为我非常接近解决方案。)
如果无法将数据从UITabBarController
传递到(第一个)子视图,我该如何将数据直接传递到第一个子视图?正如我上面解释的那样,我使用prepareForSegue从另一个视图传递图像。在我的情况下,prepareForSegue直接用于第一个视图工作吗?
非常感谢您的任何建议,我会尝试一下并回复我的发现。
答案 0 :(得分:1)
您的标签栏控制器具有viewControllers
属性。只需遍历它,检查哪个控制器是您需要的类。
func passImage(passedImage: UIImage)
{
if viewControllers!.isEmpty{
return
}
for index in 0...viewControllers!.count{
if let controller = viewControllers[index] as? DesignerTabController
controller.pickedImageView.image = passedImage
}
}
答案 1 :(得分:1)
使用viewDidLayoutSubviews()而不是viewDidLoad()解决
请参阅下面的工作解决方案代码:
class DesignerTabController : UIViewController{
@IBOutlet weak var pickedImageView: UIImageView!
@IBOutlet weak var labelTest: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
}
}
class DesignerTabBarController : UITabBarController{
var pickedImage : UIImage = UIImage()
func loadImage(passedImage: UIImage){
pickedImage = passedImage
}
override func viewDidLoad() {
super.viewDidLoad()
}
override func viewDidLayoutSubviews() {
if let controller = viewControllers![0] as? DesignerTabController{
controller.pickedImageView.image = pickedImage
}
}
}