2013-02-10 14 views
6

Wiele razy widziałem, że o to pytano, ale żadne z rozwiązań nie zadziałało. Tu jest mój urywek kodu:UITableView Komórki niestandardowe Znikające treści po przewinięciu

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    static NSString *CellClassName = @"DemoTableViewCell_sched"; 
    DemoTableViewCell_sched *cell = [tableView dequeueReusableCellWithIdentifier:CellClassName]; 

    if (cell == nil) 
    { 
     NSArray *topLevelItems = [cellLoader instantiateWithOwner:self options:nil]; 
     cell = [topLevelItems objectAtIndex:0]; 
    } 
    cell.fooData = [self.bugs objectAtIndex:indexPath.row];  
    return cell; 
} 

Potem mam w ViewDidLoad

cellLoader = [UINib nibWithNibName:@"DemoTableViewCell_sched" bundle:[NSBundle mainBundle]]; 
+0

Czy sprawdziłeś, czy w komórce jest określony identyfikator? –

+0

Tak. W komórce niestandardowej upewniłem się, że identyfikator to "DemoTableViewCell_sched." Co jeszcze powinienem sprawdzić? – user1235155

+0

[Ten wątek] (http://stackoverflow.com/a/36037259/4034301) pracował dla mnie. Świetne rozwiązanie ..! –

Odpowiedz

2

Problem odszedł, gdy:

  1. Widok tabela zawiera wiele komórek (10+)

  2. Każda komórka ma wysokość większą niż 50.

Dziwne.

+0

Ten link działał dla mnie. http://stackoverflow.com/a/36037259/4034301 –

-1

Należy obliczyć prawidłową wysokość dla każdej komórki zgodnie z jej zawartością.

Można to zrobić w metodzie delegata UITableView:

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { 
     CGFloat height; 
     //Calculate height for each cell 
     return height; 
} 
16

W moim przypadku, co się dzieje, było to, że nie trzymał silny wskaźnik do Tableview za DataSource. Kiedy więc przewinięto widok tabeli, źródło danych zostało już zwolnione i ustawione na zero, co doprowadziło do wyświetlenia tableview jako 0 dla numRowsForSection i nils dla cellForRowAtIndexPath.

Jeśli ktoś ma podobny problem, możesz sprawdzić, czy źródło danych i/lub obiekty niestandardowe są prawidłowo przechowywane.

+0

Dzięki za podzielenie się tym, to rozwiązuje mój problem! – N0un

2

W moim przypadku problem był następujący:

  1. miałem szczególny przypadek, w którym Widok kontrolera nie został wciśnięty lub przedstawione modally ale dodałem go jako podrzędny (view.addSubview) do inna perspektywa.

  2. W ten sposób rzeczywisty widok został zachowany przez jego podgląd, ale obiekt ViewController (który był DataSource dla widoku tabeli) nie został zachowany i wyszedł z pamięci.

  3. Musiałem przypisać kontroler widoku do (silnej) zmiennej, aby pozostał w pamięci.

1

Wiem, że to pytanie jest już odpowiedź, ale tylko dla pracowników Google:

W moim przypadku problemem było to, że widoki były jeszcze w UITableViewCell ale po przewijanie z powodu pomyłki w nieruchomości frame z poglądów, przeszli pod następny UITableViewCell i nie mogłem ich zobaczyć.

myślę jak przyjął odpowiedź jest wyraźnie powiedziane, że:

Problem odszedł, gdy:

  • Widok tabela zawiera wiele komórek (10+),

  • Każda komórka ma wysokość większą niż 50.

miał podobny problem z moim.

-1

To zachowanie w TableView sprawiło, że dosłownie uderzałem głową. Okazuje się, że użył

@property (weak, nonatomic) NSMutableArray *itemsArray; 

zamiast

@property (strong, nonatomic) NSMutableArray *itemsArray; 

Nadzieja ta informacja pomaga.

+0

naprawdę nie pomaga. Jeśli przewińę w dół, komórka nadal się regeneruje i wyświetla błędny UI –

+0

na początek, sprawdź, jakie dane są przekazywane z NSArray/NSDictionary, którego używasz podczas zwracania komórki w komórceForRowAtIndexPath, może być ponownie sprawdzać ograniczenia (w odniesieniu do ramki i ograniczenia w kodzie) lub ustawienia Autolayout. Rozważ również głosowanie w dół na odpowiedź @wcobbett, ponieważ właśnie to napisałem w kodzie, aby uniknąć czytania długich odpowiedzi i określić, jaki problem napotykasz w teorii lub w kodzie. – skypirate

8

Czy dodajecie parametr UITableViewcontroller jako addSubView? Następnie należy wykonać następujące czynności:

1) addChildViewController,then 
2) addSubview 
The problem is delegate and datasource of the tableview getting nil since the parent controller unable to a reference to the UITableViewController. 
Powiązane problemy