2015-04-23 64 views
0

基本上,我有一个矩形,并且我想要用户触摸矩形时打开照片库。如何在视图中调用位于viewController中的方法?

我尝试实例化视图控制器作为我的视图类中的对象,但不是很成功,因为我的openPhotoLibrary()永远不会运行。

代码可能会有帮助。

编辑 我试过代表,但我还在挣扎。

视图类

protocol PhotoLibraryDelegate { 
    func openPhotoLibrary(sender: ImagePipView) 
} 

class ImagePipView: BasePipView{ 
    var delegate: PhotoLibraryDelegate? 
    var addPhotoFrame = UIView(frame: CGRectMake(frame.width/2 - 30, 60, 60, 60)) 
    addPhotoFrame.backgroundColor = UIColor.blueColor() 
    addPhotoFrame.addGestureRecognizer(UITapGestureRecognizer(target: self, action: "addPhotoTouched:")) 
    addSubview(addPhotoFrame) 

    func addPhotoTouched(recognizer: UITapGestureRecognizer){ 
     println("PHOTO TOUCHED") 
     delegate?.openPhotoLibrary(self) 

} 

的ViewController类

class CameraViewControllerTest: UIViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate, PhotoLibraryDelegate{ 

    init() { 
    super.init(nibName:"MyNib", bundle:nil) 
    var productRequest: ImagePipView? 
    productRequest?.delegate = self 
    } 

    func openPhotoLibrary(){ 
    println ("inside photo library") 
    var photoPicker = UIImagePickerController() 
    photoPicker.delegate = self 
    photoPicker.sourceType = .PhotoLibrary 
    self.presentViewController(photoPicker, animated: true, completion: nil) 
} 

回答

0

您不能查看接入控制器。而是在您的控制器中添加点击手势到您的视图,因此您的控制器有一个对您的ImagePipView实例的引用。

3

您需要在控制器和UIView之间创建一个委托,与UITableViewDelegate相同。在您的视图中创建委托实例,并在实例化视图时从您的控制器中设置myView.delegate = self。那么你只需要在你的控制器中实现协议。

你可以在Swift here中找到有关授权的教程。

+0

谢谢!我刚刚添加了一个委托,但仍然遇到'致命错误:意外地发现零,同时解开可选值问题。你有什么想法,为什么? 当我调用'delegate.openPhotoLibrary()' – Aspen

+0

时发生错误您确定在调用此指令之前分配了您的委托吗?试试'委托?.openPhotoLibrary()代替',这可以防止在委托为'nil'的情况下崩溃。 –

+0

太棒了。 “?”帮助,因为现在我没有得到一个错误,但我注意到它没有正确调用函数..因为它甚至不会在函数println(“图片库”中)中打印第一行。你怎么看? – Aspen

相关问题