Ios scrollViewDidScroll未被调用(我设置了代理!)
情况: 我正在创建一个imageGallery,它是一个viewController,我正在以模式演示。我是按程序设计的,我还没有接触到故事板。 viewController有一个包含ImageView的scrollView,每个ImageView保存一个图像。我已经设置了Ios scrollViewDidScroll未被调用(我设置了代理!),ios,swift,uiscrollview,uiscrollviewdelegate,Ios,Swift,Uiscrollview,Uiscrollviewdelegate,情况: 我正在创建一个imageGallery,它是一个viewController,我正在以模式演示。我是按程序设计的,我还没有接触到故事板。 viewController有一个包含ImageView的scrollView,每个ImageView保存一个图像。我已经设置了scrollView.isPaginEnabled=true,它可以按预期工作,我可以很好地滚动图像 问题: 当scrollView滚动时,我正在尝试做一些工作。我已经设置了委托(这似乎是人们在我搜索答案时遇到的主要问题),但
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签名没有代码>。您好,我正在给您发一篇不相关的文章,但我找不到任何与您联系的信息。我和你一样对查尔斯也有同样的错误。你解决问题了吗?