É possível virar a página programaticamente UIPageViewController
?
ios
ios5
uikit
uipageviewcontroller
RAGOpoR
fonte
fonte
Respostas:
Sim, é possível com o método:
Esse é o mesmo método usado para configurar o primeiro controlador de exibição na página. Similar, você pode usá-lo para acessar outras páginas.
Gostaria de saber por que
viewControllers
é uma matriz, e não um único controlador de exibição?Isso ocorre porque um controlador de exibição de página pode ter uma "espinha" (como no iBooks), exibindo 2 páginas de conteúdo por vez. Se você exibir 1 página de conteúdo de cada vez, basta passar em uma matriz de 1 elemento.
Um exemplo no Swift:
fonte
Como eu também precisava disso, vou entrar em mais detalhes sobre como fazer isso.
Nota: Suponho que você tenha usado o formulário de modelo padrão para gerar sua
UIPageViewController
estrutura - que possui omodelViewController
edataViewController
criado quando você o invoca. Se você não entender o que escrevi - volte e crie um novo projeto que use oUIPageViewController
base. Você entenderá então.Portanto, a necessidade de acessar uma página específica envolve a configuração das várias partes do método listado acima. Para este exercício, suponho que seja uma visualização em paisagem com duas exibições em exibição. Além disso, eu implementei isso como uma IBAction para que isso pudesse ser feito com o pressionar de um botão ou não - é tão fácil fazer com que o seletor seja chamado e repassar os itens necessários.
Portanto, neste exemplo, você precisa dos dois controladores de exibição que serão exibidos - e, opcionalmente, se estiver avançando no livro ou para trás.
Observe que eu apenas codifiquei para onde ir para as páginas 4 e 5 e use um deslizamento para a frente. A partir daqui, você pode ver que tudo que você precisa fazer é passar as variáveis que o ajudarão a obter esses itens ...
fonte
Aqui está outro exemplo de código para uma única exibição paginada. A implementação para viewControllerAtIndex é omitida aqui, ela deve retornar o controlador de exibição correto para o índice especificado.
As páginas podem ser alteradas chamando
fonte
Eu poderia estar totalmente faltando alguma coisa aqui, mas esta solução parece muito mais simples do que muitas outras propostas.
fonte
Esse código funcionou bem para mim, obrigado.
Isto é o que eu fiz com isso. Alguns métodos para avançar ou retroceder e outro para ir diretamente para uma página específica. É para um documento de 6 páginas em modo retrato. Ele funcionará bem se você colá-lo na implementação do RootController do modelo pageViewController.
fonte
Swift 4:
Eu precisava ir para o próximo controlador ao tocar em um controlador de exibição de controlador de página e também atualizar o índice pageControl, portanto, essa foi a solução melhor e mais direta para mim :
fonte
Que tal usar métodos do dataSource?
Analogicamente para trás.
fonte
Em Swift :
fonte
No entanto, o uso dessa chamada de método 'self.pageViewController setViewControllers' não chama 'viewDidDissapear' no viewController para a página que foi recusada, enquanto que virar uma página manualmente chama viewDidDissapear na página recusada. Eu acredito que esta é a causa do meu acidente
"O número de controladores de exibição fornecidos (0) não corresponde ao número necessário (1) para a transição solicitada"
fonte
Eu também precisava de um botão para navegar para a esquerda em um PageViewController, que deveria fazer exatamente o que você esperaria do movimento do furto.
Como eu já tinha algumas regras em vigor dentro de " pageViewController: viewControllerBeforeViewController " para lidar com a navegação de furto natural, eu queria que o botão reutilizasse todo esse código e simplesmente não podia usar índices específicos para acessar páginas como as anteriores respostas fizeram. Então, eu tive que tomar uma solução alternativa.
Observe que o código a seguir é para um Page View Controller que é uma propriedade dentro do meu ViewController personalizado e tem sua coluna definida como média.
Aqui está o código que escrevi para o meu botão Navegar para a esquerda:
Você pode fazer algo muito semelhante para criar um botão de navegação correto a partir daqui.
fonte
Caso PAGE CONTROL para indicar a página atual seja O&& Você deseja que as páginas naveguem via rolagem e também clicando nos botões personalizados no Page ViewController, abaixo pode ser útil.
// Delegar chamado viewControllerAfterViewController quando o Usuário Rolar para a próxima página
}
}
// Lógica do botão personalizado (anterior e próximo)
}
}
fonte
// agora chame esse método
[self moveToPage];
Eu espero que dê certo :)
fonte
Para uma página, acabei de editar a resposta de @Jack Humphries
fonte
Como o @samwize apontou, a maneira de paginar é usando
Aqui está a maneira como eu fiz isso: tenho minha fonte de dados e o delegado separados. Você pode chamar esse método e alterar apenas a exibição "próxima". Anteriormente, você deve aplicar as regras de paginação. Ou seja, você deve verificar a direção e o próximo controlador. Se você usar esse método com sua fonte de dados personalizada, a matriz de controladores que você está exibindo não será alterada (já que você usará uma matriz personalizada em uma subclasse NSObject).
Usando sua própria fonte de dados, o método apenas define uma nova exibição (com direção específica). Como você ainda controlará as páginas que serão exibidas ao deslizar normalmente.
fonte
Estou trabalhando nisso desde ontem e finalmente consegui. Não consegui usar totalmente o modelo padrão porque tenho três viewControllers diferentes como visões de filhos:
Eu precisava de um botão de acionamento apenas no primeiro VC, então adicionei uma propriedade para pageViewController e model:
Reescrevi o método init do modelo para passar o storyboard e o pageViewController como parâmetros, para que eu pudesse defini-los no meu VC1:
Finalmente, adicionei uma IBAction no meu vc1 para acionar o método pageViewController setViewControllers: direction: animated: conclusão ::
Nota : não preciso encontrar índices de VCs, meu botão me leva ao meu segundo VC, mas não é difícil obter todos os índices e acompanhar suas visualizações de filhos:
Espero que ajude você!
fonte
Aqui está uma solução usando os métodos UIPageViewControllerDataSource :
O código controla o atual controlador de exibição exibido no UIPageViewController .
Primeiro, inicialize currentViewController para o controlador de exibição inicial definido para o UIPageViewController .
Em seguida, manter o controle de currentViewController nas UIPageViewControllerDelegate métodos: pageViewController: willTransitionToViewControllers: e pageViewController: didFinishAnimating: previousViewControllers: transitionCompleted: .
Finalmente, no método de sua escolha (no exemplo abaixo de - (IBAction) OnNext: (id) sender ), você pode programaticamente mudar para o controlador anterior ou seguinte utilizando UIPageViewControllerDataSouce métodos pageViewController: viewControllerBeforeViewController: , pageViewController: viewControllerAfterViewController: para obter o controlador de exibição seguinte ou anterior e navegue até ele chamando [self.pageViewController setViewControllers: @ [vc] direction: UIPageViewControllerNavigationDirectionForward animado: conclusão SIM: nula];
fonte
Como os ViewControllers são incorporados no PageViewController, tudo o que você precisa fazer é:
Exemplo no Xamarin, mas funcionalmente semelhante ao Swift etc. O código a seguir estaria no botão Clique em delegar em um dos ViewControllers que são mostrados como uma página:
fonte