2012-04-11 4 views
6

Sto cercando di utilizzare lo UIPageViewController con lo storyboard di Xcode. L'unico esempio che ho trovato è stato this tutorial su come implementare UIPageViewcontroller utilizzando file xib separati.utilizzando UIPageViewController in uno storyboard

Tuttavia in questo tutorial lo UIPageViewController viene istanziato a livello di codice all'interno di una classe che estende UIViewController. Ciò rende complicato tradurre in come lo storyboard interpreta lo UIPageViewcontroller (che è come un'istanza a sé stante).

Qualsiasi aiuto su come creare un funzionamento UIPageViewController con lo storyboard di Xcode sarà molto apprezzato.

UPDATE: Sono riuscito a risolvere questo problema creando un nuovo progetto in Xcode utilizzando il modello di pagecontroller predefinito. Ha usato lo storyboard ed è stato facile da seguire.

+0

Sono contento di sentire il problema è risolto - si dovrebbe pubblicare il tuo soluzione come una risposta (e accettare la risposta domani) in modo che altre persone in cerca di aiuto su questo argomento può trovare. – rickster

risposta

8

AGGIORNAMENTO: sono riuscito a risolvere questo problema creando un nuovo progetto in xcode utilizzando il modello di pagecontroller predefinito. Ha usato lo storyboard ed è stato facile da seguire.

+1

Il codice predefinito Apple ha anche istanziato l'UIPageViewController in modo programmatico ... –

7

Configurare il progetto Xcode come un PageViewController è un modo per ottenerlo, tuttavia se si desidera includere un PageViewController in uno storyboard già esistente, è possibile farlo anche in questo caso.

Se si trascina e si rilascia una scena PageViewController nello storyboard e si esegue il cablaggio di un seguito, è possibile passare a quel PageViewController. Tuttavia sembra che ci siano alcuni bug nello storyboard per configurare correttamente PageViewController, ad esempio non è possibile collegare il delegato e l'origine dati.

Un modo semplice per aggirare questo è per collegare semplicemente il delegato/origine dati nel vostro metodo init:

- (instancetype) initWithCoder:(NSCoder *)aDecoder 
{ 
    if(self = [super initWithCoder:aDecoder]) 
    { 
     self.delegate = self; 
     self.dataSource = self; 
    } 
    return self; 
} 

Questo farà sì che il delegato e DataSource metodi di essere chiamato correttamente, assumendo ovviamente si desidera che l'origine dati e delegati ad essere PageViewController. Una volta impostato, sarà necessario assicurarsi che ci sia un controller di visualizzazione quando viene caricata la vista. È possibile farlo con il metodo setViewControllers sulla classe PageViewController nel viewDidLoad:

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    [self setViewControllers:@[sweetViewController] direction:UIPageViewControllerNavigationDirectionForward animated:YES completion:^(BOOL finished) { 
     NSLog(@"Hooray I set my initial viewcontroller for my page view controller"); 
    }]; 
} 

Quando viene creato l'PageViewController, inizierà con il tuo sweetViewController, e poi iniziare a chiamare i tuoi DataSource e delegare i metodi, se necessario.

0

C'è un modo semplice per farlo con Xcode 7. Avere il ViewController che sarà l'origine dei dati e delegare in una scena Storyboard, con UIPageViewController incorporato in ContainerView. Quindi acquisisci UIPageViewController nel metodo prepareForSegue di ViewController.

ad es. Swift:

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 

    if let identifier = segue.identifier where identifier == "yourPageVCIdentifier"{ 
     if let pageController = segue.destinationViewController as? UIPageViewController { 
      pageController.dataSource = self 
      pageController.delegate = self 
      self.pageVC = pageController 
     } 
    } 
}