• Das kreative Thema des Monats Oktober wird vor allem diejenigen unter Euch besonders ansprechen, denen Do-it-yourself quasi im Blut liegt. Zeigt uns Eure Improvisationskünste oder fotografiert, was andere Leute sich so im Alltag zusammengestrickt haben. --> Zum Mitmachen bitte hier klicken

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