можно ли программно переворачивать страницу в uipageviewcontroller?

<p>можно ли программно перевернуть страницу в <code>uipageviewcontroller</code>?</p>

<p>да, это возможно с помощью метода:</p><pre><code>- (void)setviewcontrollers:(nsarray *)viewcontrollers direction:(uipageviewcontrollernavigationdirection)direction animated:(bool)animated completion:(void (^)(bool finished))completion;` </code></pre><p>это тот же метод, который используется для настройки первого контроллера представления на странице. похоже, вы можете использовать его для перехода на другие страницы.</p><p>интересно, почему <code>viewcontrollers</code> это массив, а не один контроллер представления?</p><p>это связано с тем, что контроллер просмотра страниц может иметь «позвоночник» (как в ibooks), отображающий 2 страницы контента одновременно. если вы одновременно отображаете 1 страницу контента, просто передайте массив из 1 элемента.</p><p>пример в swift:</p><pre><code>pagecontainer.setviewcontrollers([displaythisviewcontroller], direction: .forward, animated: true, completion: nil) </code></pre>

<p>так как мне это тоже нужно, я более подробно расскажу, как это сделать.</p><p>примечание: я предполагаю, что вы использовали стандартную форму шаблона для генерации структуры <code>uipageviewcontroller</code>, в которой при вызове были созданы как <code>modelviewcontroller</code>, так и <code>dataviewcontroller</code>. если вы не понимаете, что я написал - вернитесь и создайте новый проект, который использует <code>uipageviewcontroller</code> в качестве основы. вы поймете тогда.</p><p>таким образом, необходимость перехода на определенную страницу включает в себя настройку различных частей метода, перечисленных выше. для этого упражнения я предполагаю, что это<strong> ландшафтный вид с отображением двух видов. </strong>кроме того, я реализовал это как ibaction, чтобы это можно было сделать нажатием кнопки или что-то еще - так же просто сделать вызов селектора и передать необходимые элементы.</p><p>итак, для этого примера вам понадобятся два контроллера представления, которые будут отображаться - и при желании, идете ли вы вперед в книге или назад.</p><p>обратите внимание, что я просто жестко запрограммировал, куда переходить на страницы 4 и 5 и использую промах вперед ........ отсюда вы можете видеть, что все, что вам нужно сделать, это передать переменные, которые помогут вам получить эти элементы ...</p><pre><code>-(ibaction) fliptopage:(id)sender { // grab the viewcontrollers at position 4 & 5 - note, your model is responsible for providing these. // technically, you could have them pre-made and passed in as an array containing the two items... dataviewcontroller *firstviewcontroller = [self.modelcontroller viewcontrolleratindex:4 storyboard:self.storyboard]; dataviewcontroller *secondviewcontroller = [self.modelcontroller viewcontrolleratindex:5 storyboard:self.storyboard]; // set up the array that holds these guys... nsarray *viewcontrollers = nil; viewcontrollers = [nsarray arraywithobjects:firstviewcontroller, secondviewcontroller, nil]; // now, tell the pageviewcontoller to accept these guys and do the forward turn of the page. // again, forward is subjective - you could go backward. animation is optional but it's // a nice effect for your audience. [self.pageviewcontroller setviewcontrollers:viewcontrollers direction:uipageviewcontrollernavigationdirectionforward animated:yes completion:null]; // voila' - c'est fin! } </code></pre>

<p>вот еще один пример кода для одного постраничного представления. реализация для<em> viewcontrolleratindex </em>здесь опущена, она должна возвращать правильный контроллер представления для данного индекса.</p><pre><code>- (void)changepage:(uipageviewcontrollernavigationdirection)direction { nsuinteger pageindex = ((fooviewcontroller *) [\_pageviewcontroller.viewcontrollers objectatindex:0]).pageindex; if (direction == uipageviewcontrollernavigationdirectionforward) { pageindex++; } else { pageindex--; } fooviewcontroller *viewcontroller = [self viewcontrolleratindex:pageindex]; if (viewcontroller == nil) { return; } [\_pageviewcontroller setviewcontrollers:@[viewcontroller] direction:direction animated:yes completion:nil]; } </code></pre><p>страницы могут быть изменены по телефону</p><pre><code>[self changepage:uipageviewcontrollernavigationdirectionreverse]; [self changepage:uipageviewcontrollernavigationdirectionforward]; </code></pre>

<p>я мог бы что-то здесь упустить, но это решение кажется намного проще, чем предлагали многие другие.</p><pre><code>extension uipageviewcontroller { func gotonextpage(animated: bool = true, completion: ((bool) -> void)? = nil) { if let currentviewcontroller = viewcontrollers?[0] { if let nextpage = datasource?.pageviewcontroller(self, viewcontrollerafter: currentviewcontroller) { setviewcontrollers([nextpage], direction: .forward, animated: animated, completion: completion) } } } } </code></pre>

<p>этот код работал хорошо для меня, спасибо. </p><p>это то, что я сделал с этим. некоторые методы для перехода вперед или назад и один для перехода непосредственно на определенную страницу. это для 6 страниц документа в книжной ориентации. это будет работать нормально, если вы вставите его в реализацию rootcontroller шаблона pageviewcontroller.</p><pre><code>-(ibaction)pagegoto:(id)sender { //get page to go to nsuinteger pagetogoto = 4; //get current index of current page dataviewcontroller *thecurrentviewcontroller = [self.pageviewcontroller.viewcontrollers objectatindex:0]; nsuinteger retreivedindex = [self.modelcontroller indexofviewcontroller:thecurrentviewcontroller]; //get the page(s) to go to dataviewcontroller *targetpageviewcontroller = [self.modelcontroller viewcontrolleratindex:(pagetogoto - 1) storyboard:self.storyboard]; dataviewcontroller *secondpageviewcontroller = [self.modelcontroller viewcontrolleratindex:(pagetogoto) storyboard:self.storyboard]; //put it(or them if in landscape view) in an array nsarray *theviewcontrollers = nil; theviewcontrollers = [nsarray arraywithobjects:targetpageviewcontroller, secondpageviewcontroller, nil]; //check which direction to animate page turn then turn page accordingly if (retreivedindex < (pagetogoto - 1) && retreivedindex != (pagetogoto - 1)){ [self.pageviewcontroller setviewcontrollers:theviewcontrollers direction:uipageviewcontrollernavigationdirectionforward animated:yes completion:null]; } if (retreivedindex > (pagetogoto - 1) && retreivedindex != (pagetogoto - 1)){ [self.pageviewcontroller setviewcontrollers:theviewcontrollers direction:uipageviewcontrollernavigationdirectionreverse animated:yes completion:null]; } } -(ibaction)pagefoward:(id)sender { //get current index of current page dataviewcontroller *thecurrentviewcontroller = [self.pageviewcontroller.viewcontrollers objectatindex:0]; nsuinteger retreivedindex = [self.modelcontroller indexofviewcontroller:thecurrentviewcontroller]; //check that current page isn't first page if (retreivedindex < 5){ //get the page to go to dataviewcontroller *targetpageviewcontroller = [self.modelcontroller viewcontrolleratindex:(retreivedindex + 1) storyboard:self.storyboard]; //put it(or them if in landscape view) in an array nsarray *theviewcontrollers = nil; theviewcontrollers = [nsarray arraywithobjects:targetpageviewcontroller, nil]; //add page view [self.pageviewcontroller setviewcontrollers:theviewcontrollers direction:uipageviewcontrollernavigationdirectionforward animated:yes completion:null]; } } -(ibaction)pageback:(id)sender { //get current index of current page dataviewcontroller *thecurrentviewcontroller = [self.pageviewcontroller.viewcontrollers objectatindex:0]; nsuinteger retreivedindex = [self.modelcontroller indexofviewcontroller:thecurrentviewcontroller]; //check that current page isn't first page if (retreivedindex > 0){ //get the page to go to dataviewcontroller *targetpageviewcontroller = [self.modelcontroller viewcontrolleratindex:(retreivedindex - 1) storyboard:self.storyboard]; //put it(or them if in landscape view) in an array nsarray *theviewcontrollers = nil; theviewcontrollers = [nsarray arraywithobjects:targetpageviewcontroller, nil]; //add page view [self.pageviewcontroller setviewcontrollers:theviewcontrollers direction:uipageviewcontrollernavigationdirectionreverse animated:yes completion:null]; } } </code></pre>

<p>как насчет использования методов из источника данных?</p><pre><code>uiviewcontroller *controller = [pageviewcontroller.datasource pageviewcontroller:self.pageviewcontroller viewcontrollerafterviewcontroller:pageviewcontroller.viewcontrollers.firstobject]; [pageviewcontroller setviewcontrollers:@[controller] direction:uipageviewcontrollernavigationdirectionforward animated:yes completion:nil]; </code></pre><p>аналогично для обратной.</p>

<p><strong> swift 4: </strong></p><p>мне нужно было перейти к следующему контроллеру, когда я коснусь next на контроллере представления pagecontroller, а также обновил индекс pagecontrol, так что это было лучшее и простое решение <em>для меня</em>:</p><pre><code>let pagecontroller = self.parent as! pageviewcontroller pagecontroller.setviewcontrollers([parentvc.orderedviewcontrollers[1]], direction: .forward, animated: true, completion: nil) pagecontroller.pagecontrol.currentpage = 1 </code></pre>

<p>в<strong> свифт </strong>:</p><pre><code>import uikit extension homeviewcontroller { // mark: - carousel management. func starttimerformovingcarousel(let numberofsecondsbetweenfiringsofthetimer: nstimeinterval) { if (self.timerformovingcarousel == nil) { self.timerformovingcarousel = nstimer.scheduledtimerwithtimeinterval(numberofsecondsbetweenfiringsofthetimer, target: self, selector: "movecarousel", userinfo: nil, repeats: true) } } func movecarousel() { println("i move the carousel.") let currentcontentviewcontrollerdisplayed = self.pageviewcontroller!.viewcontrollers[0] as! contentviewcontroller var index: int = currentcontentviewcontrollerdisplayed.index if index == self.arrayviewcontrollers.count - 1 { index = 0 } else { ++index } let contentviewcontrollertodisplay = self.arrayviewcontrollers[index] as! contentviewcontroller self.pageviewcontroller.setviewcontrollers([contentviewcontrollertodisplay], direction: uipageviewcontrollernavigationdirection.forward, animated: true, completion: nil) self.pagecontrol.currentpage = contentviewcontrollertodisplay.index } func invalidatetimerformovingcarousel() { if (self.timerformovingcarousel != nil) { self.timerformovingcarousel.invalidate() self.timerformovingcarousel = nil } } } </code></pre>

<pre><code>- (void)movetopage { nsuinteger pageindex = ((contentviewcontroller *) [self.pageviewcontroller.viewcontrollers objectatindex:0]).pageindex; pageindex++; contentviewcontroller *viewcontroller = [self viewcontrolleratindex:pageindex]; if (viewcontroller == nil) { return; } [self.pageviewcontroller setviewcontrollers:@[viewcontroller] direction:uipageviewcontrollernavigationdirectionforward animated:yes completion:nil]; } </code></pre><p>// теперь вызываем этот метод</p><p>[self movetopage];</p><p>надеюсь это работает :)</p>

<p>однако использование этого метода «self.pageviewcontroller setviewcontrollers» не вызывает viewdiddissapear для viewcontroller для страницы, которая была отклонена, в то время как ручное перелистывание страницы вызывает viewdiddissapear на отклоненной странице. я считаю, что это причина моего крушения </p><p>«количество предоставленных контроллеров представления (0) не соответствует количеству, требуемому (1) для запрошенного перехода»</p>

<p>мне также нужна была кнопка для перемещения влево на pageviewcontroller, которая должна делать именно то, что вы ожидаете от движения пальцем.</p><p>поскольку у меня уже есть несколько правил внутри "<em>pageviewcontroller: viewcontrollerbeforeviewcontroller</em>" для работы с естественной навигацией по свайпам, я хотел, чтобы кнопка повторно использовала весь этот код, и просто<strong> не мог позволить себе использовать определенные индексы </strong>чтобы достичь страниц, как и предыдущие ответы. итак, мне пришлось принять альтернативное решение.</p><p>обратите внимание, что следующий код предназначен для контроллера просмотра страниц, который является свойством внутри моего пользовательского viewcontroller, и его позвоночник установлен в середине.</p><p>вот код, который я написал для моей левой кнопки навигации:</p><pre><code>- (ibaction)btnnavigateleft\_click:(id)sender { // calling the pageviewcontroller to obtain the current left page uiviewcontroller *currentleftpage = [\_pagecontroller.viewcontrollers objectatindex:0]; // creating future pages to be displayed nsarray *newdisplayedpages = nil; uiviewcontroller *newrightpage = nil; uiviewcontroller *newleftpage = nil; // calling the delegate to obtain previous pages // my "pageviewcontroller:viewcontrollerbeforeviewcontroller" method returns nil if there is no such page (first page of the book). newrightpage = [self pageviewcontroller:\_pagecontroller viewcontrollerbeforeviewcontroller:currentleftpage]; if (newrightpage) { newleftpage = [self pageviewcontroller:\_pagecontroller viewcontrollerbeforeviewcontroller:newrightpage]; } if (newleftpage) { newdisplayedpages = [[nsarray alloc] initwithobjects:newleftpage, newrightpage, nil]; } // if there are two new pages to display, show them with animation. if (newdisplayedpages) { [\_pagecontroller setviewcontrollers:newdisplayedpages direction:uipageviewcontrollernavigationdirectionreverse animated:yes completion:nil]; } } </code></pre><p>вы можете сделать что-то очень похожее, чтобы сделать правильную навигационную кнопку отсюда.</p>

<p>в случае<strong> если page control для обозначения текущей страницы - o &&. вы хотите, чтобы страницы перемещались с помощью прокрутки, а также путем нажатия пользовательских кнопок в page viewcontroller, ниже может оказаться полезным. </strong></p><pre><code>//set delegate & data source for pageview controller [say in view did load] self.pageviewcontroller.datasource = self; self.pageviewcontroller.delegate = self; // delegates called viewcontrollerbeforeviewcontroller when user scroll to previous page - (uiviewcontroller *)pageviewcontroller:(uipageviewcontroller *)pageviewcontroller viewcontrollerbeforeviewcontroller:(uiviewcontroller *)viewcontroller{ [\_nextbtn settitle:@"next" forstate:uicontrolstatenormal]; nsuinteger index = ((pagecontentviewcontroller*) viewcontroller).pageindex; if (index == nsnotfound){ return nil; }else if (index > 0){ index--; }else{ return nil; } return [self viewcontrolleratindex:index]; } </code></pre><p>// делегировать вызываемый viewcontrollerafterviewcontroller, когда пользователь прокручивает до следующей страницы </p><pre><code>- (uiviewcontroller *)pageviewcontroller:(uipageviewcontroller *)pageviewcontroller viewcontrollerafterviewcontroller:(uiviewcontroller *)viewcontroller{ nsuinteger index = ((pagecontentviewcontroller*) viewcontroller).pageindex; if (index == nsnotfound){ return nil; }else if (index < 3){ index++; }else{ return nil; } return [self viewcontrolleratindex:index];} //delegate called while transition of pages. the need to apply logic in this delegate is to maintain the index of current page. - (void)pageviewcontroller:(uipageviewcontroller *)pageviewcontroller willtransitiontoviewcontrollers:(nsarray *)pendingviewcontrollers{ buttonindex = (int)((pagecontentviewcontroller*) pendingviewcontrollers.firstobject).pageindex; </code></pre><p>}</p><pre><code>-(void)pageviewcontroller:(uipageviewcontroller *)pageviewcontroller didfinishanimating:(bool)finished previousviewcontrollers:(nsarray *)previousviewcontrollers transitioncompleted:(bool)completed{ if (buttonindex == 0){ \_backbutton.hidden = true; }else if (buttonindex == [self.pageimages count] - 1){ \_backbutton.hidden = false; [\_nextbtn settitle:@"begin" forstate:uicontrolstatenormal]; }else{ \_backbutton.hidden = false; } </code></pre><p>}</p><p>// логика пользовательских кнопок (предыдущая и следующая)</p><pre><code>-(void)backbtnclicked:(id)sender{ if (buttonindex > 0){ buttonindex -= 1; } if (buttonindex < 1) { \_backbutton.hidden = yes; } if (buttonindex >=0) { [\_nextbtn settitle:@"next" forstate:uicontrolstatenormal]; pagecontentviewcontroller *startingviewcontroller = [self viewcontrolleratindex:buttonindex]; nsarray *viewcontrollers = @[startingviewcontroller]; [self.pageviewcontroller setviewcontrollers:viewcontrollers direction:uipageviewcontrollernavigationdirectionforward animated:no completion:nil]; } </code></pre><p>}</p><pre><code>-(void)nextbtnclicked:(id)sender{ if (buttonindex < 3){ buttonindex += 1; } if(buttonindex == \_pageimages.count){ //navigate outside pageview controller }else{ if (buttonindex ==3) { [\_nextbtn settitle:@"begin" forstate:uicontrolstatenormal]; } \_backbutton.hidden = no; pagecontentviewcontroller *startingviewcontroller = [self viewcontrolleratindex:buttonindex]; nsarray *viewcontrollers = @[startingviewcontroller]; [self.pageviewcontroller setviewcontrollers:viewcontrollers direction:uipageviewcontrollernavigationdirectionforward animated:no completion:nil]; } </code></pre><p>}</p><pre><code>//button index & max count -(nsinteger)presentationcountforpageviewcontroller:(uipageviewcontroller *)pageviewcontroller{ return [self.pageimages count];} -(nsinteger)presentationindexforpageviewcontroller:(uipageviewcontroller *)pageviewcontroller{ return buttonindex;} </code></pre>

<p>для одной страницы я только что отредактировал ответ @jack humphries</p><pre><code>-(void)viewdidload { counter = 0; } -(ibaction)buttonclick:(id)sender { counter++; dataviewcontroller *secondvc = [self.modelcontroller viewcontrolleratindex:counter storyboard:self.storyboard]; nsarray *viewcontrollers = nil; viewcontrollers = [nsarray arraywithobjects:secondvc, nil]; [self.pageviewcontroller setviewcontrollers:viewcontrollers direction:uipageviewcontrollernavigationdirectionforward animated:yes completion:null]; } </code></pre>

<p>вот решение с использованием<strong> uipageviewcontrollerdatasource </strong>методов:</p><p>код отслеживает текущий отображаемый контроллер представления в<strong> uipageviewcontroller </strong>.</p><pre><code>... @property (nonatomic, strong) uiviewcontroller *currentviewcontroller; @property (nonatomic, strong) uiviewcontroller *nextviewcontroller; ... </code></pre><p>сначала инициализируйте<strong> currentviewcontroller </strong>в начальный контроллер представления, установленный для<strong> uipageviewcontroller </strong>.</p><pre><code>- (void) viewdidload { [super viewdidload]; ... self.currentviewcontroller = self.viewcontrollers[0]; ... [self.pageviewcontroller setviewcontrollers: @[self.currentviewcontroller] direction: dir animated: yes completion: nil]; } </code></pre><p>затем следите за<strong> currentviewcontroller </strong>в<strong> uipageviewcontrollerdelegate </strong>method:<strong> pageviewcontroller: willtransitiontoviewcontrollers: </strong>и<strong> pageviewcontroller: didfinishanimating: previousviewcontrollers: transitioncompleted: </strong>.</p><pre><code> - (nullable uiviewcontroller *) pageviewcontroller: (uipageviewcontroller *) pageviewcontroller viewcontrollerbeforeviewcontroller: (uiviewcontroller *) viewcontroller { nsinteger idx = [self.viewcontrollers indexofobject: viewcontroller]; if (idx > 0) { return self.viewcontrollers[idx - 1]; } else { return nil; } } - (nullable uiviewcontroller *) pageviewcontroller:(uipageviewcontroller *)pageviewcontroller viewcontrollerafterviewcontroller: (uiviewcontroller *) viewcontroller { nsinteger idx = [self.viewcontrollers indexofobject: viewcontroller]; if (idx == nsnotfound) { return nil; } else { if (idx + 1 < self.viewcontrollers.count) { return self.viewcontrollers[idx + 1]; } else { return nil; } } } - (void) pageviewcontroller:(uipageviewcontroller *)pageviewcontroller willtransitiontoviewcontrollers:(nsarray<uiviewcontroller *> *)pendingviewcontrollers { self.nextviewcontroller = [pendingviewcontrollers firstobject]; } - (void)pageviewcontroller:(uipageviewcontroller *)pageviewcontroller didfinishanimating:(bool)finished previousviewcontrollers:(nsarray<uiviewcontroller *> *)previousviewcontrollers transitioncompleted:(bool)completed { if (completed) { self.currentviewcontroller = self.nextviewcontroller; } } </code></pre><p>наконец, в выбранном вами методе (в приведенном ниже примере это<strong> - (ibaction) onnext: (id) отправитель </strong>), вы можете программно переключиться на следующий или предыдущий контроллер, используя<strong> uipageviewcontrollerdatasouce </strong>method<strong> pageviewcontroller : viewcontrollerbeforeviewcontroller: </strong>,<strong> pageviewcontroller: viewcontrollerafterviewcontroller: </strong>, чтобы получить следующий или предыдущий контроллер представления и перейти к нему с помощью вызова<strong> [self.pageviewcontroller setviewcontrollers: направление @ [vc]: uipageviewcontrollernavigationdirection: направление y: для юнионизации: направление для направления] ; </strong></p><pre><code> - (void) onnext { uiviewcontroller *vc = [self pageviewcontroller: self.tutorialviewcontroller viewcontrollerafterviewcontroller: self.currentviewcontroller]; if (vc != nil) { self.currentviewcontroller = vc; [self.tutorialviewcontroller setviewcontrollers: @[vc] direction: uipageviewcontrollernavigationdirectionforward animated: yes completion: nil]; } } </code></pre>

<p>как отметил @samwize, способ разбиения на страницы заключается в использовании</p><pre><code>setviewcontrollers:array </code></pre><p>вот как я это сделал: у меня есть источник данных и делегат отдельно. вы можете вызвать этот метод и изменить только следующий вид. ранее вы должны применять правила подкачки. то есть, вы должны проверить направление и следующий контроллер. если вы используете этот метод со своим пользовательским источником данных, отображаемый массив контроллеров не изменится (поскольку вы будете использовать пользовательский массив в подклассе nsobject).</p><p>используя ваш собственный источник данных, метод просто устанавливает новое представление (с определенным направлением). так как вы все равно будете контролировать страницы, которые будут отображаться при обычном перелистывании.</p>

<p>я работаю над этим со вчерашнего дня, и я наконец сделал это работает. я не мог использовать стандартный шаблон полностью, потому что у меня есть три разных viewcontrollers как дочерние виды:</p><pre><code>1 - rootviewcontroller; 2 - model; 3 - viewcontrollers 3.1 - vc1; 3.2 - vc2; 3.3 - vc3. note: all of vcs has storyboard id. </code></pre><p>мне нужна была кнопка триггера только в первом vc, поэтому я добавил одно свойство для pageviewcontroller и model:</p><pre><code>#import <uikit/uikit.h> #import "model.h" @interface vc1 : uiviewcontroller @property (nonatomic, strong) uipageviewcontroller *thepageviewcontroller; @property (nonatomic, strong) seutimepagesmodel *themodel; @end </code></pre><p>я переписал метод init модели, чтобы передать раскадровку и pageviewcontroller в качестве параметров, чтобы я мог установить их для моего vc1:</p><pre><code>- (id)initwithstoryboard:(uistoryboard *)storyboard andpageviewcontroller:(uipageviewcontroller *)controller { if (self = [super init]) { vc1 *vc1 = [storyboard instantiateviewcontrollerwithidentifier:@"vc1"]; vc1.pageviewcontroller = controller; vc1.model = self; vc2 *vc2 = [storyboard instantiateviewcontrollerwithidentifier:@"vc2"]; vc3 *vc3 = [storyboard instantiateviewcontrollerwithidentifier:@"vc3"]; self.pagedata = [[nsarray alloc] initwithobjects:vc1, vc2, vc3, nil]; } return self; } </code></pre><p>наконец, я добавил ibaction в свой vc1 для запуска метода pageviewcontroller<strong> <em>setviewcontrollers: direction: animated: завершение:</em> </strong>:</p><pre><code>- (ibaction)go:(id)sender { vc2 *vc2 = [\_model.pages objectatindex:1]; nsarray *viewcontrollers = @[vc2]; [\_pageviewcontroller setviewcontrollers:viewcontrollers direction:uipageviewcontrollernavigationdirectionforward animated:yes completion:nil]; } </code></pre><p><strong> примечание </strong>мне не нужно находить индексы vc, моя кнопка переводит меня ко второму vc, но не сложно получить все индексы и отслеживать ваши дочерние представления:</p><pre><code>- (ibaction)selecionaseutime:(id)sender { nsuinteger index = [\_model.pages indexofobject:self]; index++; vc2 *vc2 = [\_model.pages objectatindex:1]; nsarray *viewcontrollers = @[vc2]; [\_pageviewcontroller setviewcontrollers:viewcontrollers direction:uipageviewcontrollernavigationdirectionforward animated:yes completion:nil]; } </code></pre><p>я надеюсь, что это поможет вам!</p>