• Wieder einmal haben uns unsere Apfeltalker tolle Fotos zur Abstimmung eingesandt. Welches ist Euer Favorit? Stimmt mit ab! Hier geht es zur Abstimmung --> Klick
  • Es ist bereits Apfeltalk-Tradition und wir möchten sie auch in diesem Jahr fortsetzen: Unser Apfeltalk-Weihnachtslogo-Wettbewerb hat begonnen! Gestaltet für uns das Weihnachtsbanner, das im Monat Dezember bis zum Weihnachtsfest unsere Webseite schmücken soll. Lasst Eurer Kreativität freien Lauf! Hier geht es zum Wettbewerb --> Klick

UITableView like Mail-App

sashs

James Grieve
Registriert
23.03.10
Beiträge
133
Hallo,

in der Mail-Application gibt es ja eine View um eine neue Mail zu verfassen. Das ist eine UITableView mit mehreren Zeilen. Die letzte Zeile ist die Zelle in der man den Mail-Inhalt eingibt.
Diese Zelle besteht, wenn ich es richtig sehe, aus nur aus einer UITextView ohne Scrollbars. Diese Zelle scheint aber automatisch mit zu wachsen.

Muss ich die Größe der Zelle immer wieder neu berechnen oder gibt es einen anderen Weg sowas zu realisieren?

Gruß

Sascha
 
Ich vermute mal das es sich dabei um ein UITextView handelt, welches mit folgenden Optionen

textView.scrollEnabled = YES;
textView.editable = YES;

"automatisch wachsend" bzw. mit einer ScrollBar versehen wurde (die erscheint wenn mehr Zeilen benötigt werden als Platz vorhanden ist) und editierbar gemacht wurde.

Würde meine Hand dafür jedoch nicht ins Feuer legen, hab leider nicht den Apple-Mail-Quellcode zur Hand ;)
 
Ich glaube irgendwie nicht, dass die UITextView scrollbar ist, denn wenn man mehrere Zeilen eingibt, scrollt die ganze Tabelle hoch und nicht nur die TextView.
Anfangs kann man nicht runterscrollen, aber sobald mehrere Zeilen da sind, weil die TextArea zu wachsen scheint, kann man scrollen.

Gruß

Sascha
 
So, ich denke ich habe eine Lösung, die Eingabe aus der Mail-App nachzubauen.
Ich habe es jetzt so gelöst. Für die Zeilen wie Betreff oder ähnliche, wird eine neue UITableViewCell gebaut, mit einem Laben und einem Textfeld.
Davon werden beliebig viele in der Tabelle als Cell eingefügt.
Die UITExtView befindet sich nicht in einer Zelle sondern in der TableFooterView.
Bei dieser UITextView muss man dann auf Eingaben reagieren.

Code:
- (void)textViewDidChange:(UITextView *)textView{
    
    
    CGRect frame = contentView.frame;
    frame.size.height = contentView.contentSize.height;
    contentView.frame = frame;
    frame.size.height = frame.size.height+30; //hier muss zur Height die Höhe aller Zellen hinzuaddiert werden.
    self.tableView.contentSize = frame.size;
}
Ich hoffe das hilft. :-)
Hab im Internet zwar viele Themen gefunden, in denen Leute fragen wie das geht, aber keiner hatte eine Lösung die komplett funktioniert hat.



Gruß

Sascha

EDIT:// Ich bitte drum den Titel umzubennen, damit dieses Thema besser gefunden wird, wenn man die Eingabe der Mail-App nachbauen möchte.

Bspw: UITextView in UITableView like Mail-App
 
Wäre es nicht auch möglich, im TableView-delegate
Code:
- (CGFloat)tableView:([URL="http://developer.apple.com/iphone/library/documentation/UIKit/Reference/UITableView_Class/Reference/Reference.html#//apple_ref/doc/c_ref/UITableView"]UITableView[/URL] *)[I]tableView[/I] heightForRowAtIndexPath:([URL="http://developer.apple.com/iphone/library/documentation/Cocoa/Reference/Foundation/Classes/NSIndexPath_Class/Reference/Reference.html#//apple_ref/doc/c_ref/NSIndexPath"]NSIndexPath[/URL] *)[I]indexPath
[/I]
für die letzte Zelle einfach die Höhe des Textfeldes zurückzugeben?
 
Normal nicht, weil diese Methode normal nur aufgerufen wird, wenn die Zelle neu gezeichnet wird.

Gruß

Sascha