2017-01-08 6 views
0

Ich habe eine UITableView im Menü meiner Anwendung. Diese Tabelle hat am Anfang eine bestimmte Anzahl von Zellen (Zeilen).Hinzufügen von verschiedenen Arten von Zellen zu UITableView

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{ 
    return 5; 
} 

Wenn zum Beispiel der Zelle der indexPath.row = 1 geklickt hat, habe ich einige neue Zellen hinzufügen muß (können 3-Zellen sagen), nachdem diese Zelle (so im Index 2, 3 und 4). Und wenn diese Zelle zum zweiten Mal angeklickt wird, muss ich die hinzugefügten Zellen entfernen. Das Problem besteht darin, dass die hinzuzufügenden Zellen einen anderen Typ haben (eine andere Klasse). Ich suchte nach, wie man Zellen hinzufügt/löscht und ich fand, dass ich die insertRowsAtIndexPaths und die Löschung benutzen kann. Aber wie kann ich den Typ der Zelle angeben und dann zurückgeben? Dies ist die Schaltfläche Ziel meiner Zelle:

[cell.showDetail addTarget:self action:@selector(btnSowDetailClicked) forControlEvents:UIControlEventTouchUpInside]; 

Ich weiß nicht, was in den Wähler bringen zu tun, was ich beschreiben:

-(void) btnSowDetailClicked { 
    // ???? 
} 

Und wie kann ich die numberOfRowsInSection in der Wähler?

Antwort

-1

Sie können ein muablearray einleiten, um Ihre Zellen zu speichern, egal wie viele Zellen Sie haben, wenn Sie eine Zelle hinzufügen, initialisieren und im Array speichern müssen.

im numberOfRows Methode, nur return array.count;

im cellforrowatindexpath Methode, die Zelle aus dem Array erhalten, dann die Zelle zurück.

0

Es gibt ein paar Dinge, die Sie im Auge behalten müssen, wenn Sie nicht bereits sind -

  1. der Zustand der Schaltfläche
  2. eine Datenquelle für die Klasse der Zelle zurück
  3. die Anzahl der Zellen

ein Vorschlag ist ein NSMutableArray von NSStrings (die verwalten wieder Zeigen Sie die Zellklasse an, die zurückgegeben werden soll.)

In der Schaltflächenaktion gehen Sie folgendermaßen vor: NSStrings repräsentieren die Zellklasse für einen bestimmten Index (z. @ "UITableViewCell" oder @ "MyCustomCell" etc.) -

-(void) btnSowDetailClicked { 
    // Toggle button state - prob better to persist in property BOOL cellButtonState 
    cellButtonState = !cellButtonState; 
    // update data source(s) accordingly 
    if (cellButton.selected) { 
      // add NSStrings to data source array 
      // create array of NSIndexPaths to pass to table view 
      // update UITableView with - (void)insertRowsAtIndexPaths:withRowAnimation: 
    } 
    else { 
      // remove NSStrings from data source array 
      // create array of NSIndexPaths to pass to table view 
      // update UITableView with - deleteRowsAtIndexPaths:withRowAnimation: 
    } 
} 

Als UITableView Methoden in der Dokumentation zu den oben genannten -

UITableView sofort den entsprechenden Delegierten und Datenquelle Methoden aufrufen danach um die Zellen und anderen Inhalt für sichtbare Zellen zu bekommen.

So kann die Datenquelle zurückkehren [dataSourceArray count] für die Anzahl der Zeilen. Um die korrekte Klasse für den Ort zu erhalten, an dem Sie die Zelle zurückgeben, wählen Sie unter cellForRowAtIndexPath das NSString-Objekt aus dem Datenquellenarray bei indexPath.Zeile und verwenden Sie NSClassFromString, um die Klasse für die Zelle zu erhalten!

Verwandte Themen