2013-08-06 13 views
5

Przyjrzałem się wielu innym pytaniom SO związanym z tym pytaniem i nie znalazłem jednego, który zajmowałby się moją konkretną sytuacją. Tworzę zmienną liczbę tableViews programowo w jednej metodzie. W późniejszym momencie chciałbym przeładować dane w jednym z tableViews w innej metodzie. Chciałbym użyć ...Przeładuj dane w programowo utworzonym tableView

[tableView reloadData]; 

do ponownego załadowania danych do konkretnej tableView. Problemem, który mam, jest dostęp do tableView, który został utworzony programowo w późniejszym czasie. Moją myślą jest ustawienie unikalnego znacznika dla każdego tableView w trakcie jego tworzenia.

Oto moje pytanie. Czy można utworzyć i zainicjować tableView, odwołując się do istniejącego tagu tableView. Na przykład, z UIView jest możliwe ...

UIView *notATableView = [[UIView alloc] viewWithTag:1]; 

które pozwoliłyby mi zmodyfikować widok którego tag był równy 1. Czy istnieje możliwość, podobna do tableViews?

+1

po prostu użyć zmiennych instancji lub właściwości - [self.tableView1 reloadData] lub [self.tableView2 reloadData] – rdelmar

+0

zgadzam się z rdelmar - Dlaczego przeszkadza ustawianie znaczników, gdy można przypisać utworzone widoki do właściwości. Znacznie więcej do utrzymania. – Abizern

Odpowiedz

1

Tak, można ustawić znacznik na widoku tabeli podczas tworzenia go i odzyskać widok tabeli później używając viewWithTag.

// Assuming you've added the table view as a subview to the current view controller 
UITableView *tableView = (UITableView *)[self.view viewWithTag:1]; 

Jednak nie jest to ponowne przydzielanie. Właśnie dostajesz wskazówkę.

Potem tylko odświeżyć dane lub robić cokolwiek:

[tableView reloadData]; 
+0

Dziękujemy! Miałem wrażenie, że casting będzie częścią rozwiązania. –

1

Nie używałbym takich znaczników (ogólnie staram się trzymać z dala od nich w ogóle). Przechowuj utworzone widoki tabel w zmiennych instancji lub w tablicy.

+0

Bardzo podoba mi się ten pomysł. Nie przyszło mi to do głowy. Dlaczego pozostajesz trzymać się z daleka od tagów? –

+1

Tagi są niepowtarzalne. W rzeczywistości wpadłem w ten pomysł: w trybie edycji tableviewcell wchodzi w tryb edycji, dodając kilka subviews, które mają identyfikatory tagów, zderzyły się z tymi, które wybrałem. To była zabawna noc debugowania. Wyszukiwanie drzewka podrzędnego dla znaczników jest powolne, szczególnie jeśli drzewo ma wiele węzłów. Żaden z tych problemów nie dotyczy tylko przechowywania wskaźników obiektu! – jsd

2

Wystarczy odnieść się do UITableViews według ich nazw właściwości.

[self.thisTableView reloadData]; 
[self.thatTableView reloadData]; 

Brak tagów!

Można również użyć nazwy własności Bo jeśli sprawdzeniu w swojej UITableViewDataSource i metod UITableViewDelegate

if(tableView == self.thisTableView){ 
    [tableView reloadData]; 
} 
+1

Rzeczy typu 'self.thisTableView' są częściej określane jako * właściwości * lub * zmienne instancji *. –

+0

@MarcusAdams - Dzięki, masz rację. Będę edytować, aby wyjaśnić. – hgwhittle

1

1.

tablesArray = [NSMutableArray alloc] init]; 

Bądź tablesArray globalnie. Następnie dodaj każdy instancję tableView's.

[tablesArray addObject:tbl1]; 
[tablesArray addObject:tbl2]; 

Teraz możesz uzyskać je w łatwy sposób.

UITableView *tbl1 = (UITableView *)[tablesArray objectAtIndex:0]; 
[tbl1 reloadData]; 

2.

Można tworzyć @property dla każdego tableView i można je porównać bezpośrednio.

3.

Jak prosisz o tagu więc tak można używać znaczników też.

[tableView1 setTag:1]; 
[self.view addSubview:tableView1]; 
// how to get 
UITableView *tableView1 = (UITableView *)[self.view viewWithTag:1]; 
Powiązane problemy