#ios #swift #uigesturerecognizer #uipageviewcontroller
#iOS #swift #uigesturerecognizer #uipageviewcontroller
Вопрос:
Я пытаюсь реализовать руководство с 3 экранами, и на последней странице, когда пользователь проводит пальцем, приложение должно перейти к основному UIViewController. Когда для источника данных pageViewController установлено значение self, жесты swipe не распознаются. Есть ли обходной путь для этого?
class TourViewController: UIViewController, UIPageViewControllerDataSource, UIPageViewControllerDelegate {
var pageViewController: UIPageViewController!
var pageTitles: NSArray!
var pageImages: NSArray!
var pageDesc: NSArray!
override func viewDidLoad() {
super.viewDidLoad()
self.pageTitles = NSArray(objects: "page 1", "page 2", "page 3")
self.pageImages = NSArray(objects: "image 1", "image 2", "image 3")
self.pageDesc = NSArray(objects: "note 1", "note 2", "note 3")
self.pageViewController = self.storyboard?.instantiateViewControllerWithIdentifier("PageViewController") as! UIPageViewController
self.pageViewController.dataSource = self
var startVC = self.viewControllerAtIndex(0) as ContentViewController
var viewControllers = NSArray(object: startVC)
self.pageViewController.setViewControllers(viewControllers as! [UIViewController], direction: .Forward, animated: true, completion: nil)
self.pageViewController.view.frame = CGRectMake(0, 30, self.view.frame.width, self.view.frame.size.height-60)
self.addChildViewController(self.pageViewController)
self.view.addSubview(self.pageViewController.view)
self.pageViewController.didMoveToParentViewController(self)
self.pageViewController.delegate = self
}
Ниже приведена функция, которую я хотел бы вызвать с помощью swipe gestures. Это работает, когда для источника данных pageViewController установлено значение nil
func handleSwipes(sender:UISwipeGestureRecognizer) {
if (sender.direction == .Left) {
print("Swipe Left")
}
if (sender.direction == .Right) {
print("Swipe Right")
}
}
Есть ли что-нибудь, что я могу сделать в моей следующей функции?
func pageViewController(pageViewController: UIPageViewController, viewControllerAfterViewController viewController: UIViewController) -> UIViewController? {
var vc = viewController as! ContentViewController
var index = vc.pageIndex as Int
print(index)
if (index == NSNotFound) {
return nil
}
index
if (index == self.pageTitles.count) {
return nil
}
return self.viewControllerAtIndex(index)
}
Не удалось найти ни одного примера swift по этому поводу. Пожалуйста, помогите. Спасибо.
Комментарии:
1. Я нашел способ сделать это. Попробуйте выполнить какое-либо условие внутри функции scrollViewWillBeginDragging(_ ScrollView: UIScrollView) {} .. это сработало.
2. Спасибо за ответ, но scrollViewWillBeginDragging не вызывается ни при каком пролистывании. Чего мне не хватает?
3. Позвольте мне протестировать ваш код….
4. Я уверен, что эта функция заработала сегодня утром… позвольте мне попробовать еще раз из вашего кода…
5. Я только что нашел ответ на вашу проблему. сначала загрузите пример проекта по этой ссылке github.com/Weijay/PageViewController-Example и запустите, дайте мне знать, что вы хотите…