Freitag, 27. Juli 2012

Horizontaler UITableView (Trick)

Einleitung
Wer hat sich als iOS Entwickler noch nicht gefragt warum die UITableView nur vertikal scrollt?! ...
Es wäre doch super wenn sie das auch horizontal könnte. Ein kleiner Trick den ich im Netz gefunden habe macht die UITableView auch horizontal Scrollbar.

Funktionsweise
Die Tabelle wird um 90 Grad gedreht (auf die Seite gekippt), damit die Zellen aber nicht auch auf der Seite liegen werden diese wieder zurück gedreht.

Schritt 1:
Normalen ViewController anlegen der von UITableViewController erbt.

Schritt 2:
in der ViewDidLoad folgende zeilen eintragen um die Tabelle zu drehen


- (void)viewDidLoad
{
    [super viewDidLoad];
    
    const CGFloat k90DegreesCounterClockwiseAngle = (CGFloat) -(90 * M_PI / 180.0);
    CGRect frame = tableV.frame;
    tableView.transform = CGAffineTransformRotate(CGAffineTransformIdentity, k90DegreesCounterClockwiseAngle);
    tableView.frame = frame; 
}


Schritt 3:
In der Methode in der die UITableCellView erzeugt und konfiguriert wird die Zelle drehen

 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"Cell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    
    if (!cell) 
    {
        cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
    }    

    CGFloat k90DegreesClockwiseAngle = (CGFloat) (90 * M_PI / 180.0);    
    cell.transform = CGAffineTransformRotate(CGAffineTransformIdentity, k90DegreesClockwiseAngle);
    
   //your cell init here
    //.....................
    
    return cell;
}



Die Zellenbreite kann über die folgende Methode (die eigentlich für die Höhe zuständig ist) konfiguriert werden. In dem Codebeispiel gebe ich die Breite des Bildschirms zurück... so ist die Cell immer genau so breit wie eine Bildschirmbreite...

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    return self.view.bounds.size.width;
}

Keine Kommentare:

Kommentar veröffentlichen