Я следовал руководству pageviewcontroller, чтобы создать слайдер изображений.Затем я адаптировал его для вставки в ячейку просмотра таблицы, так как мне нужен слайдер изображений внутри таблицы.
Мне нравится идея использовать этот же код в полноэкранном режиме или встроить в другое представление.
Однако, когда я делаю это, события pageviewafter и pageviewbefore не запускаются при скольжении.Я подозреваю, что tableviewcontroller или ячейка поглощают события, поэтому pageviewcontroller не получает их.
Я в лучшем случае являюсь разработчиком ios на неполный рабочий день, поэтому я ищу любые предложения, которые я могу проверить / преодолеть мою проблему.
Некоторая часть кода в соответствии с просьбой.Я добавляю свой PageViewController после завершения обратного вызова получения изображений.plantPhotoContainerView - это UIView внутри статической ячейки, которая была добавлена вместе с раскадровкой.
self.plantPhotoContainerView.addSubview(vc.view)
Pageviewcontroller устанавливает делегата для себя, и в настоящее время я игнорирую изображения, передаваемые в контроллер, и просто использую некоторые тестовые изображения:
class ImageSliderViewController: UIPageViewController, UIPageViewControllerDataSource {
init(images: [String]) {
super.init(transitionStyle: UIPageViewController.TransitionStyle.scroll, navigationOrientation: UIPageViewController.NavigationOrientation.horizontal, options: nil)
}
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
var images = ["Growers", "Home", "Media"]
override func viewDidLoad() {
super.viewDidLoad()
dataSource = self
view.backgroundColor = UIColor.yellow
let imageViewController = ImageViewController()
imageViewController.imageName = images.first
let viewControllers = [imageViewController]
setViewControllers(viewControllers, direction: .forward, animated: true, completion: nil)
}
override func viewDidLayoutSubviews() {
self.view.translatesAutoresizingMaskIntoConstraints = false
view.leftAnchor.constraint(equalTo: view.superview!.leftAnchor).isActive = true
view.rightAnchor.constraint(equalTo: view.superview!.rightAnchor).isActive = true
view.topAnchor.constraint(equalTo: view.superview!.topAnchor).isActive = true
view.bottomAnchor.constraint(equalTo: view.superview!.bottomAnchor).isActive = true
}
func pageViewController(_ pageViewController: UIPageViewController, viewControllerAfter viewController: UIViewController) -> UIViewController? {
let currentImageName = (viewController as! ImageViewController).imageName!
let currentIndex = images.firstIndex(of: currentImageName)!
if currentIndex < images.count - 1 {
let imageViewController = ImageViewController()
imageViewController.imageName = images[currentIndex + 1]
return imageViewController
}
return nil
}
func pageViewController(_ pageViewController: UIPageViewController, viewControllerBefore viewController: UIViewController) -> UIViewController? {
let currentImageName = (viewController as! ImageViewController).imageName!
let currentIndex = images.firstIndex(of: currentImageName)!
if currentIndex > 0 {
let imageViewController = ImageViewController()
imageViewController.imageName = images[currentIndex - 1]
return imageViewController
}
return nil
}
}