2011-11-30 10 views
5

Mam dziwny projekt przypadek, w którym do wdrożenia muszę umieścić dwa UITableViews w tym samym widoku. Po prostu użyłbym sekcji, ale potrzebuję indeksu na drugiej tabeli.Przewijanie dwóch widoków UITable razem

Chciałbym, aby oba przewijały się razem, tak jakby były dwiema częściami tego samego widoku tabeli. czy to możliwe?

Oto podstawowe makieta ilustrująca dlaczego:

mockup

O ile dobrze rozumiem, nie można przesunąć wskaźnik. Ponadto po dodaniu indeksu do tabeli pojawia się on w całym widoku tabeli, a nie tylko w jednej sekcji.

Jeśli muszę zaimplementować to jako dwa widoki tabel, oba muszą przewinąć tak, jakby były jednym. Jeśli można to zrobić za pomocą sekcji, to nawet lepiej.

+0

Proszę wyjaśnić, co to znaczy „wskaźnik na drugim stole”. Nie jestem przekonany, że pojedynczy "UITableView" nie zaspokoi twoich potrzeb. – SundayMonday

+1

Czy możesz podać swoje pytanie bardziej szczegółowo na temat tego, co próbujesz zrobić? Jestem pewien, że możemy znaleźć prostsze rozwiązanie, które używa tylko jednego 'UITableView'! – Legolas

Odpowiedz

23

Aktualizacja

Po obejrzeniu aktualizację mój stary odpowiedź nie jest bardzo dobra, ale zostawię moją poprzednią odpowiedź dla każdego, kto chce.

Nowa odpowiedź - zależy od tego, w jaki sposób mają zostać zsynchronizowane tabele.

Jeśli znasz

  1. której komórki są w top 5
  2. Jak wysoki każda komórka jest
  3. Przesunięcie widok tabeli

Następnie można obliczyć których komórka jest widoczna na u góry tabeli top 5. Możesz użyć tych informacji, aby przewinąć dolną tabelę do właściwego indeksu.


Old odpowiedź

Jestem z innymi mężczyznami nie wiem, dlaczego, co chcesz lub jeśli jestem misinterpreting ale to całkiem proste.

UITableView jest podklasą UIScrollView więc można ustawić siebie jako UITableViewDelegate i zastąpić

- (void)scrollViewDidScroll:(UIScrollView *)scrollView; 
{ 
    UITableView *slaveTable = nil; 

    if (self.table1 == scrollView) { 
     slaveTable = self.table2; 
    } else if (self.table2 == scrollView) { 
     slaveTable = self.table1; 
    } 

    [slaveTable setContentOffset:scrollView.contentOffset]; 
} 

To daje mi coś, co wygląda tak:

enter image description here

Górny UITableView jest self.table1 a na dole jest self.table2, jeśli którakolwiek z tabel jest przewijana, przewijanie jest odbijane w lustrze w drugiej tabeli.

+0

Na pewno zadziała, a to w rzeczywistości najlepsza opcja. – Macmade

+0

To działa dla mnie, aby przewinąć równolegle umieszczone TableViews, aby przewinąć unisono – Krishnan

+0

Działa idealnie! – xarly

1

Z makiety wydaje się, że można to osiągnąć za pomocą pojedynczego UITableView z dwiema sekcjami.

Zamiast utrzymywać dwa widoki tableView, można zachować dwie kolekcje (po jednej dla każdej sekcji). Następnie w cellForRowAtIndexPath wybierz kolekcję do użycia w oparciu o sekcję określoną w indexPath.

+0

Indeks pojawi się w obu sekcjach, a nie tylko w drugiej sekcji. – James

+0

Nie sądzę, że całkowicie rozumiem, co próbujesz zrobić. Proszę wyjaśnić za pomocą przykładu. – SundayMonday

+0

Chciałbym mieć indeks na stole, ale tylko w drugiej sekcji. Tak jak jest teraz, jeśli dodaję indeks, pojawia się tam, gdzie się pojawia (w całej tabeli). Chcę tylko indeksować w drugiej sekcji. – James

0

w szybkim tym kodem:

func scrollViewDidScroll(scrollView: UIScrollView) { 
    if tb_time1 == scrollView { 
     tb_time2.contentOffset = tb_time1.contentOffset 
    }else if tb_time2 == scrollView { 
     tb_time1.contentOffset = tb_time2.contentOffset 
    } 
} 
Powiązane problemy