UIScrollViewDelegate не вызывается в пользовательском классе

Когда я создаю экземпляр и добавляю представление прокрутки к моему self.view в моем ViewController класс и установить делегат представления прокрутки на себя, функции делегата вызывают. Как написано ниже:

class ViewController: UIViewController, UIScrollViewDelegate {

    @IBOutlet weak var smallView: UIView!

    override func viewDidLoad() {
        super.viewDidLoad()

        let width = Double(view.frame.width)
        let height = Double(view.frame.height)
        let frame = CGRect(x: 0.0, y: 0.0, width: width, height: height)
        let scrollView = UIScrollView(frame: frame)
        //scrollView.backgroundColor = UIColor.blue
        let size = CGSize(width: width + 300, height:1000)
        scrollView.contentSize = size
        smallView.addSubview(scrollView)
        scrollView.delegate = self

    }

    func scrollViewDidScroll(_ scrollView: UIScrollView) {
        print("Gets called.")
    }

}

Тем не менее, когда я создаю пользовательский класс, в этом случае называется PhotoBoothи вызовите попытку вызова функции делегата в этом пользовательском классе, функции не будут вызваны. Вот мой пользовательский класс:

import Foundation
import UIKit

class PhotoBooth: NSObject, UIScrollViewDelegate {

    private var boothView: UIView
    //private var scrollView: UIScrollView

    init(view: UIView) {

        boothView = view

    }

    func startSession() {
        let width = Double(boothView.frame.width)
        let height = Double(boothView.frame.height)
        let frame = CGRect(x: 0.0, y: 0.0, width: width, height: height)
        let scrollView = UIScrollView(frame: frame)
        //scrollView.backgroundColor = UIColor.blue
        let size = CGSize(width: width + 300, height:1000)
        scrollView.contentSize = size
        boothView.addSubview(scrollView)
        scrollView.delegate = self
    }

    func scrollViewDidScroll(_ scrollView: UIScrollView) {
        print("paisdjfij")
    }

}

И я создаю экземпляр класса в моем ViewController вот так:

import UIKit

class ViewController: UIViewController, UIScrollViewDelegate {

    @IBOutlet weak var smallView: UIView!

    override func viewDidLoad() {
        super.viewDidLoad()

        let photoBooth = PhotoBooth(view: self.view)
        photoBooth.startSession()


    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

}

Любые решения проблемы? Пожалуйста, дайте мне знать и большое спасибо за вашу помощь заранее.

1 ответ

Вместо этого вы должны использовать протоколы для вызова прокрутки в пользовательском классе. Это будет выглядеть примерно так.

CustomClass.h

@protocol CustomDelegate <NSObject>

-(void)customDelegateMethod;

@end

@interface CustomClass : UIScrollView <UIScrollViewDelegate>
{
    id<CustomDelegate> delegate
}

CustomClass.m

-(void) methodScrollView
{
    [self.delegate customDelegateMethod];
}

ViewController.h

@interface ViewController: UIViewController <CustomDelegate>
{
}

ViewController.m

-(void)makeCustomScrollView
{
     CustomClass *objCustom = [[CustomClass alloc] init];
     objCustom.delegate = self;
     //other stuff
}
-(void)customDelegateMethod
{
}
Другие вопросы по тегам