2013-01-03 11 views
11

Ho un progetto con un pulsante che consente all'utente di passare dalla visualizzazione elenco (UITableView) alla visualizzazione griglia (UICollectionView) ma non so come farlo.Come passare UITableView e UICollectionView

+6

Non è molto povero inglese, ma attualmente è una domanda scarsa. Su cosa esattamente sei bloccato? Cosa hai provato a fare finora? –

+0

Mi dispiace @ ma sono un novizio! –

risposta

19

Supponiamo che il controller disponga di una proprietà UITableView denominata tableView e una proprietà denominata collectionView. Nel tuo viewDidLoad devi aggiungere la vista iniziale. Supponiamo che sia la vista tabella:

- (void)viewDidLoad 
{ 
    self.tableView.frame = self.view.bounds; 
    [self.view addSubview:self.tableView]; 
} 

Poi, nel tuo tasto di richiamata, scambiare i punti di vista fuori:

- (void)buttonTapped:(id)sender 
{ 
    UIView *fromView, *toView; 

    if (self.tableView.superview == self.view) 
    { 
     fromView = self.tableView; 
     toView = self.collectionView; 
    } 
    else 
    { 
     fromView = self.collectionView; 
     toView = self.tableView; 
    } 

    [fromView removeFromSuperview]; 

    toView.frame = self.view.bounds; 
    [self.view addSubview:toView]; 
} 

Se volete un'animazione di fantasia, è possibile utilizzare +[UIView transitionFromView:toView:duration:options:completion:] invece:

- (void)buttonTapped:(id)sender 
{ 
    UIView *fromView, *toView; 

    if (self.tableView.superview == self.view) 
    { 
     fromView = self.tableView; 
     toView = self.collectionView; 
    } 
    else 
    { 
     fromView = self.collectionView; 
     toView = self.tableView; 
    } 

    toView.frame = self.view.bounds; 
    [UIView transitionFromView:fromView 
         toView:toView 
         duration:0.25 
         options:UIViewAnimationTransitionFlipFromRight 
        completion:nil]; 
} 
+0

grazie! Ma quale ViewController posso usare? TableViewController o CollectionViewController. Come posso utilizzare TableViewDelegate e Datasource in una classe outsite (non in ViewController)? –

+0

Basta usare un normale UIViewController e aggiungere entrambi i tipi di vista come proprietà. Oppure, se si desidera mantenere separata la logica per le due viste, è possibile creare un UITableViewController e un UICollectionViewController e utilizzare le loro viste anziché le proprietà del controller principale. – Simon

+0

Se le viste sono già parte della gerarchia della vista (ad esempio aggiungendo con xib/storyboard) devi passare 'UIViewAnimationOptionShowHideTransitionViews' come uno dei parametri delle opzioni in' + transitionFromView: ToView: duration: options: completion: 'metodo . – MrBr

2

Un altro modo per affrontarlo consiste nel disporre di un singolo UICollectionView in cui è possibile passare all'implementazione UICollectionViewFlowLayout in base alla modalità desiderata.

Per convertire da UITableView a UICollectionView, ci sono molti tutorial online, ad esempio this.

Problemi correlati