如何调用视图中的方法,该方法位于viewController中?

时间:2015-04-23 09:42:26

标签: ios swift uiimagepickercontroller viewcontroller

基本上,我有一个矩形,我想在用户触摸矩形时打开照片库。

我尝试将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)
}

2 个答案:

答案 0 :(得分:3)

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

您可以在Swift here找到关于委派的教程。

答案 1 :(得分:0)

您无法在视图中访问控制器。而是在控制器中添加点击手势到您的视图,因此您的控制器具有对ImagePipView实例的引用。