Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios scrollViewDidScroll未被调用(我设置了代理!)_Ios_Swift_Uiscrollview_Uiscrollviewdelegate - Fatal编程技术网

Ios scrollViewDidScroll未被调用(我设置了代理!)

Ios scrollViewDidScroll未被调用(我设置了代理!),ios,swift,uiscrollview,uiscrollviewdelegate,Ios,Swift,Uiscrollview,Uiscrollviewdelegate,情况: 我正在创建一个imageGallery,它是一个viewController,我正在以模式演示。我是按程序设计的,我还没有接触到故事板。 viewController有一个包含ImageView的scrollView,每个ImageView保存一个图像。我已经设置了scrollView.isPaginEnabled=true,它可以按预期工作,我可以很好地滚动图像 问题: 当scrollView滚动时,我正在尝试做一些工作。我已经设置了委托(这似乎是人们在我搜索答案时遇到的主要问题),但

情况: 我正在创建一个imageGallery,它是一个viewController,我正在以模式演示。我是按程序设计的,我还没有接触到故事板。 viewController有一个包含ImageView的scrollView,每个ImageView保存一个图像。我已经设置了
scrollView.isPaginEnabled=true
,它可以按预期工作,我可以很好地滚动图像

问题: 当scrollView滚动时,我正在尝试做一些工作。我已经设置了委托(这似乎是人们在我搜索答案时遇到的主要问题),但是
scrollviewdidcoll
从未被调用。 我对正在发生的事情完全不知所措。我尝试了很多不同的事情,但现在已经没有主意了

@objc public class ImageGallery: UIViewController, UIScrollViewDelegate {

// MARK:- VARIABLES

/// An array of imageItems
@objc public var galleryItems = [ImageGalleryItem]()

/// The index of the image the gallery should start at
@objc public var startingIndex: NSNumber?

/// The UIImage to display if there is an error
@objc public var errorImage: UIImage?

/// The UIImage to display if the ImageGalleryItem doesn't have an image
@objc public var defaultImage: UIImage?

var scrollView: UIScrollView!

// MARK:- INITS

/// Initialiser for ImageGallery passing an array of ImageGalleryItems
///
/// - Parameter ImageGalleryItems: an array of ImageGalleryItems
@objc public init() {

    self.defaultImage = UIImage(named: "default", in: getResourceBundle(), compatibleWith: nil)!
    self.errorImage = UIImage(named: "error", in: getResourceBundle(), compatibleWith: nil)!
    super.init(nibName:nil, bundle:nil)
}


@objc public required init?(coder aDecoder: NSCoder) {
    super.init(coder: aDecoder);
}


// MARK:- VIEW LIFECYCLES
override public func viewDidLoad() {

    super.viewDidLoad()

    configureScrollView()

    self.scrollView.delegate = self
    configureImageViews()
    configurePresentationDefaults()
}


func configureScrollView() {

    self.scrollView = UIScrollView(frame: view.frame)

    self.scrollView.isPagingEnabled = true
    self.scrollView.contentOffset = CGPoint(x: CGFloat(truncating: startingIndex ?? 0) * UIScreen.main.bounds.width, y: 0)

    let imagesCount = galleryItems.count
        let contentWidth = CGFloat(imagesCount) * UIScreen.main.bounds.width
        self.scrollView.contentSize = CGSize(width: contentWidth, height: UIScreen.main.bounds.height)


    if let toolbar = configureToolBar() {

        view.addSubview(self.scrollView)
        view.addSubview(toolbar)
        view.bringSubviewToFront(toolbar)
    }
}

private func scrollViewDidScroll(_ scrollView: UIScrollView) {
    print("delegate")
}
更新

我错过了一场比赛

private func scrollViewDidScroll(_ scrollView: UIScrollView!) {
    print("delegate")
}
private func scrollViewDidScroll(_ scrollView: UIScrollView!) {
    print("delegate")
}

成功了。

您使用
scrollViewDidScroll:
delegate方法从
private
访问级别关键字发出。
UIScrollViewDelegate
是一个
NSObject
,由于该方法是私有的,因此它看不到该方法,因此不会调用委托方法。由于类是公共的,因此需要使用
public
访问级别声明方法

试试这个:

public func scrollViewDidScroll(_ scrollView: UIScrollView) {
    print("delegate")
}
删除私有关键字

func scrollViewDidScroll(_ scrollView: UIScrollView)
我错过了一场比赛

private func scrollViewDidScroll(_ scrollView: UIScrollView!) {
    print("delegate")
}
private func scrollViewDidScroll(_ scrollView: UIScrollView!) {
    print("delegate")
}

解决了这个问题。

是的,我已经尝试过了,我只添加了
private
,因为xcode显示了一个警告。仅供参考,xcode 10.2.1(它有Swift 5)有一个错误,如果您将
Swift编译模式设置为
增量构建
,则不会调用此函数。答案是在函数之前添加
@objc
。是的,我已经试过了,我只添加了
private
,因为xcode显示了一个警告。它没有改变任何东西我没有注意到你的类是public,所以你也需要将委托方法声明为public。我已经编辑了这篇文章。
private func-scrollView-didcroll(\uscrollview:UIScrollView!)
修复了您使用哪个swift版本的问题?因为API签名没有
。您好,我正在给您发一篇不相关的文章,但我找不到任何与您联系的信息。我和你一样对查尔斯也有同样的错误。你解决问题了吗?