2016-11-30 2 views
0

У меня есть очень конкретный прецедент, который мне интересно, с кем общался. Я хочу добавить кнопку «Продолжить» в свой первый пользовательский интерфейс UIPageViewController. Эта статья (Swift iOS: how to trigger next page using buttons) касается, если вы хотите, чтобы она была на каждой странице, но я не планирую ее использовать.Как продвигать страницу в uipageviewcontroller с uibutton на uiviewcontroller/раскадровке

У меня есть UIPageViewController и 6 viewcontrollers, с которыми я в настоящее время могу перемещаться путем прокрутки.

Я попытался подключить кнопку к контроллеру вида в виде segue, но представляет ее за пределами PageViewController. Я думал о попытке просто нажать правой кнопкой мыши на щелчок кнопки, но я не мог уйти от этой фигуры.

У кого-нибудь есть идея, как атаковать установку одной кнопки на одном из контроллеров представления и заставить ее перейти к следующему контроллеру представления в UIPageViewController?


Это было отмечено как дубликатное, но дубликатов по этому вопросу нет. Есть немного похожих, но ничего подобного. Если есть, укажите его. В настоящее время связанная версия представляет собой obj-c ответ на аналогичный вопрос без объяснения того, как связать нужную функцию с контроллером представления. Этот ответ я могу реализовать как глобальную кнопку легко, но одна кнопка контроллера просмотра не покрывается им.

Благодаря


Редактировать для окончательного решения кода.

Так это было два части решения закодировано в быстром 3.

В расширении источника данных uipageviewcontroller, то FUNC, чтобы перевернуть страницу был построен следующим образом.

func goNextPage() { 
    let cur = self.viewControllers![0] 
    let p = self.pageViewController(self, viewControllerAfter: cur) 
    self.setViewControllers([p!], direction .forward, animated: true, completion: nil) 
    } 

Кусок в отдельном контроллере представления строится следующим образом

@IBAction func nextPageButtonWasTapped(_ sender: Any) { 
    var candidate: UIViewController = self 
    while true { 
    if let pageViewController = candidate as? MyUIPageViewController { 
     pageViewController.goNextPage() 
     break 
    } 
    guard let next = parent else { break } 
    candidate = next 
    } 
} 
+0

Действительно ли ваш вопрос имеет какое-либо отношение к 'UIPageControl', или это ошибка в вашем названии? –

+0

Извините, что отредактировал uipageviewcontroller –

+1

Посмотрите, если [this] (http://stackoverflow.com/questions/11938149/turn-page-programmatically-in-uipageviewcontroller-when-using-uipageviewcontroll) отвечает на ваш вопрос. –

ответ

0

Прогулка вверх по иерархии вид контроллера, чтобы найти контроллер представления страницы. Когда вы найдете его, попросите его перевернуть страницу:

@IBAction func nextPageButtonWasTapped(_ sender: AnyObject?) { 
    var candidate: UIViewController = self 
    while true { 
     if let pageViewController = candidate as? UIPageViewController { 
      candidate.navigateForward() 
      break 
     } 
     guard let next = parentViewController else { break } 
     candidate = next 
    } 
} 

Реализовать navigateForward в расширении на UIPageViewController, на основе версии Objective-C от this answer.

+0

Спасибо за ваш ответ! Я построил функцию в расширении для перехода на следующую страницу, но не смог заставить их подключиться. Думаю, ты меня на правильном пути. Когда я это осуществил, я получаю сообщение об ошибке, в котором говорится: «Значение типа« UIViewcontroller »не имеет имени« goNextPage ». Так что похоже, что он не перебрасывает переменную-кандидат в качестве контроллера просмотра страницы. –

+0

Я понял, что проблема была выше.Я выбрал в качестве общего контроллера просмотра страниц, а не пользовательский контроллер просмотра с расширением и функциями, которые я создал. Теперь у меня это связано, просто нужно заставить работать функцию расширения. Я отмечаю ваш ответ как решенный. Еще раз спасибо! –

Смежные вопросы