2013-01-03 13 views
11

Mam projekt z przyciskiem, który pozwala użytkownikowi przełączać między widokiem listy (UITableView) i widoku siatki (UICollectionView), ale nie wiem jak to zrobić.Jak zmienić UITableView i UICollectionView

+6

Nie jest to bardzo słaby angielski, ale obecnie jest to kiepskie pytanie. Na czym to polega? Co próbowaliście zrobić do tej pory? –

+0

Przykro mi, ale jestem nowicjuszem! –

Odpowiedz

19

Załóżmy, że kontroler ma UITableView właściwość o nazwie tableView i UICollectionView właściwość o nazwie collectionView. W swoim viewDidLoad musisz dodać widok początkowy. Załóżmy, że jest to widok tabeli:

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

Następnie w przycisk zwrotnego, wymieniać poglądy na:

- (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]; 
} 

Jeśli chcesz fantazyjne animacji, można użyć +[UIView transitionFromView:toView:duration:options:completion:] zamiast:

- (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

dzięki! Ale z którego ViewController mogę korzystać? TableViewController lub CollectionViewController. Jak mogę użyć TableViewDelegate i Datasource w klasie zewnętrznej (nie ViewController)? –

+0

Wystarczy użyć zwykłego kontrolera UIViewController i dodać oba typy widoku do niego jako właściwości. Lub, jeśli chcesz zachować logikę dla dwóch widoków osobno, możesz utworzyć UITableViewController i UICollectionViewController i użyć ich widoków zamiast właściwości głównego kontrolera. – Simon

+0

Jeśli twoje widoki są już częścią hierarchii widoku (np. Przez dodanie z xib/storyboard) musisz przekazać 'UIViewAnimationOptionShowHideTransitionViews' jako jeden z parametrów opcji w' + transitionFromView: ToView: duration: options: completion: 'method . – MrBr

2

Innym sposobem radzenia sobie z tym problemem jest posiadanie pojedynczego UICollectionView, w którym można zmienić implementację UICollectionViewFlowLayout w zależności od pożądanego trybu.

Aby przekonwertować z UITableView na UICollectionView, istnieje wiele samouczków online, na przykład this.

Powiązane problemy