Tabellen mit UITableViewController
Objective-C: Protokolle deklarieren
-
Ein Protokoll definiert eine Menge von Methoden, die entweder
requiredoderoptionalsind:@protocol SomeProtocol - (id) someRequiredMethod; - (id) someOtherRequiredMethodWithInt:(int) anInt; @optional - (id) someOptionalMethod; @required - (id) someOtherRequiredMethod; @end
Objective-C: Protokolle implementieren
-
Konformität zu Protokollen:
SomeObject : NSObject <SomeProtocol, SomeOtherProtocol> { -
Schnittstellen, Gemeinsamkeiten(nicht in Klassenhierarchie abbildbar)
-
Klassen geben an, zu welchen Protokollen sie konform sind:
@interface SomeObject : NSObject <SomeProtocol, SomeOtherProtocol> { //... } @end
-
Protokolle werden vor allem zur Beschreibung von Schnittstellen-Kontrakten oder für Gemeinsamkeiten von Klassen, die sich nicht in der Klassenhierarchie abbilden lassen, verwendet.
Objective-C: Private Methoden
-
Private Methoden können über
@interfacein der Implementierung deklariert werden:#import "SomeObject.h" // Class continuation is declared with () @interface SomeObject () - (NSString *) somePrivateMethod; @end // Implementierung der privaten Methode @implementation SomeObject - (NSString *) somePrivateMethod { return @"somePrivateMethod was here"; } @end
Tabellen, Tabellen-Styles
UITableView und UITableViewController
Anzahl Abschnitte / Zeilen
-
numberOfSectionsInTableView:ist dafür zuständig, die Anzahl der Abschnitte zurückzuliefern. -
tableView:numberOfRowsInSection:ist dafür zuständig, die Anzahl der Zeilen für einen Abschnitt zurückzuliefern.- (NSInteger) numberOfSectionsInTableView:(UITableView *)tableView { return 1; } - (NSInteger) tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { return 5; }
Abschnitte/Zelleninhalte
tableView:titleForHeaderInSection:ist dafür zuständig, die Überschrift für einen Tabellenabschnitt zu liefern.tableView:cellForRowAtIndexPath:ist dafür zuständig, anhand von Abschnitts- und Zeilenindex (indexPath) ein Cell-Objekt zurückzuliefern.- Nicht mehr benötigte Cell-Objekte werden von UIKit in Objekt-Pools verwaltet und sollten aus diesen wiederverwendet werden.
- Bei mehreren verschiedenen Cell-Typen werden die Objekte anhand eines selbstgewählten Identifiers unterschieden. Zu jedem Identifier gibt es einen separaten Objekt-Pool.
Beispielcode: tableView:cellForRowAtIndexPath:
- (UITableViewCell *)tableView:(UITableView *)tableView
cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"SimpleCell";
// Cell-Objekt aus Pool wiederverwenden
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
// Oder neu erzeugen sofern kein Pool-Objekt vorhanden
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault
reuseIdentifier:CellIdentifier];
[cell autorelease];
}
cell.textLabel.text = @"Some cell text";
return cell;
}
Weitere Informationen
- Beispielanwendung
TableViewSuite,AdvancedTableViewCells - Heterogeneous cells in a UITableViewController:
http://cocoawithlove.com/2008/12/heterogeneous-cells-in.html

