- Registriert
- 13.12.09
- Beiträge
- 266
Hallo zusammen,
also diesen Fehler finde ich echt merkwürdig, habe auch schon einiges versucht, aber dazu später mehr..
Zu meinem Problem:
Ich habe ein schönes grouped TableView erstellt, es gibt nur eine Section und dort gibt es 4 Zeilen.
1. Bild
2. Kategorie
3. Position (Bisher nicht implementiert, nur den Label gibt es)
4. Kommentar (eine Tabellen-zelle in der eine TextView eingebaut ist)
Ich fange mit der Row 4 an (ist dann leichter zu erklären) und trage erstmal einen Kommentar ein. Klappt alles wunderbar.
Anschließend möchte ich jetzt eine Kategorie auswählen.
Wenn ich auf Kategorie tippe, öffnet sich per
eine neue View in der eine PickerView eingebaut ist. Dort wählt man dann eine Kategorie zu dem entsprechenden Bild welches man vorher ausgewählt hat. Über einen
schmeiße ich die View dann wieder weg (dissmissModalViewController usw.)
die Tabelle erscheint wieder und in der
-Methode mach ich ein
(ist dafür nicht die perfekte Methode muss ich noch ändern)
...und siehe da.. der Kommentar den ich vorher eingetragen hatte ist futsch, einfach nicht mehr sichtbar.
ich habe herausgefunden das dies durch die Methode reloadData hervorgerufen wird.
Aber ich muss die daten neu Laden um das Bild, was man auswählen kann, in der image.view der zelle anzuzeigen. das erscheint nicht wenn ich reloadData nicht aufrufe. so, und jetzt kommt das wirklich erstaunliche.
Das mit der kommentar Zelle hab ich so gelöst das, wenn man die Zelle anklickt (und nicht das Kommentarfeld innerhalb),
der firstResponder sofort an das Textfeld übergeben wird.. und wenn ich jetzt die zelle (nicht die TextView) anklicke und gedrückt halte, dann sehe ich meinen Text den ich zuvor eingegeben hatte, lass ich die Maustaste wieder los ist der Text weg. keine Ahnung was da im Busch ist.
Was ich bereits versucht habe:
Die TextView wird über
in die Zelle eingefügt.
dann Hab ich das contentView einfach mal weggelassen... bringt aber nix.
dann habe ich einfach geschrieben[self.view addSubView:......] das selbe ergebniss, der Text verschwindet immer noch.
alle unnötigen verschönerungen des Textfeldes deaktiviert... wieder nix.
wie gesagt.. wenn ich den reload Data nicht mache bleibt der text, aber das bringt mir nix, da das bild dann fehlt... ein Teufelskreis.
Ich hatte hier schon viele Probleme die ich alle gelöst habe aber nun hänge ich fest.
Ich hoffe mir konnte jemand folgen, weil das ziemlich kompliziert zu beschreiben ist, wobei das Programm einen ganz simplen aufbau hat.
Der QuellCode in der betroffenen Datei ist über 300 Zeilen lang, wer mag und vielleicht Langeweile hat kann sich das mal anschauen:
Ich hoffe mir kann dann jemand etwas dazu sagen, wenn noch Quellcode erforderlich ist poste ich noch mehr oder lad das ganze projekt hoch.
Für Fragen, Anregungen, Kritik... bin ich auch jederzeit dankbar.
Viele Grüße, Chris
also diesen Fehler finde ich echt merkwürdig, habe auch schon einiges versucht, aber dazu später mehr..
Zu meinem Problem:
Ich habe ein schönes grouped TableView erstellt, es gibt nur eine Section und dort gibt es 4 Zeilen.
1. Bild
2. Kategorie
3. Position (Bisher nicht implementiert, nur den Label gibt es)
4. Kommentar (eine Tabellen-zelle in der eine TextView eingebaut ist)
Ich fange mit der Row 4 an (ist dann leichter zu erklären) und trage erstmal einen Kommentar ein. Klappt alles wunderbar.
Anschließend möchte ich jetzt eine Kategorie auswählen.
Wenn ich auf Kategorie tippe, öffnet sich per
Code:
[self presentModalViewController:categoryView animated:YES];
Code:
UIBarButtonItem
die Tabelle erscheint wieder und in der
Code:
viewWill Appear
Code:
[self.tableView reloadData]
...und siehe da.. der Kommentar den ich vorher eingetragen hatte ist futsch, einfach nicht mehr sichtbar.
ich habe herausgefunden das dies durch die Methode reloadData hervorgerufen wird.
Aber ich muss die daten neu Laden um das Bild, was man auswählen kann, in der image.view der zelle anzuzeigen. das erscheint nicht wenn ich reloadData nicht aufrufe. so, und jetzt kommt das wirklich erstaunliche.
Das mit der kommentar Zelle hab ich so gelöst das, wenn man die Zelle anklickt (und nicht das Kommentarfeld innerhalb),
der firstResponder sofort an das Textfeld übergeben wird.. und wenn ich jetzt die zelle (nicht die TextView) anklicke und gedrückt halte, dann sehe ich meinen Text den ich zuvor eingegeben hatte, lass ich die Maustaste wieder los ist der Text weg. keine Ahnung was da im Busch ist.
Was ich bereits versucht habe:
Die TextView wird über
Code:
[cell.contentView addSubView:textView]
dann Hab ich das contentView einfach mal weggelassen... bringt aber nix.
dann habe ich einfach geschrieben[self.view addSubView:......] das selbe ergebniss, der Text verschwindet immer noch.
alle unnötigen verschönerungen des Textfeldes deaktiviert... wieder nix.
wie gesagt.. wenn ich den reload Data nicht mache bleibt der text, aber das bringt mir nix, da das bild dann fehlt... ein Teufelskreis.
Ich hatte hier schon viele Probleme die ich alle gelöst habe aber nun hänge ich fest.
Ich hoffe mir konnte jemand folgen, weil das ziemlich kompliziert zu beschreiben ist, wobei das Programm einen ganz simplen aufbau hat.
Der QuellCode in der betroffenen Datei ist über 300 Zeilen lang, wer mag und vielleicht Langeweile hat kann sich das mal anschauen:
Code:
#import "TableList.h"
@implementation TableList
@synthesize report;
- (id)initWithStyle:(UITableViewStyle)style
{
self = [super initWithStyle:style];
if (self) {
}
return self;
}
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
self.title = NSLocalizedString(@"Neuer Bericht", @"Neuer Bericht");
}
return self;
}
- (void)didReceiveMemoryWarning
{
// Releases the view if it doesn't have a superview.
[super didReceiveMemoryWarning];
// Release any cached data, images, etc that aren't in use.
}
#pragma mark - View lifecycle
- (void)viewDidLoad
{
[super viewDidLoad];
dataArray = [NSArray arrayWithObjects:@"Bild", @"Kategorie", @"Position", @"Kommentar", nil];
categoryView = [[CategoryChooser alloc]initWithNibName:@"CategoryChooser" bundle:nil];
report = [[Report alloc] init];
issueImageView = [[UIImageView alloc] init];
}
- (void)viewDidUnload
{
[super viewDidUnload];
// Release any retained subviews of the main view.
// e.g. self.myOutlet = nil;
}
- (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
self.report.category = categoryView.report.category;
NSLog(@"report.cat: %@", self.report.category);
if (self.report.category != nil)
{
[self.tableView reloadData];
}
NSLog(@"CommentView: %@",commentTextView.text);
}
- (void)viewDidAppear:(BOOL)animated
{
[super viewDidAppear:animated];
}
- (void)viewWillDisappear:(BOOL)animated
{
[super viewWillDisappear:animated];
}
- (void)viewDidDisappear:(BOOL)animated
{
[super viewDidDisappear:animated];
}
#pragma mark - Table view data source
- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section
{
return @"Erstellung eines neuen Berichts";
}
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
// Return the number of sections.
return 1;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
// Return the number of rows in the section.
return [dataArray count];
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:CellIdentifier];
}
cell.detailTextLabel.font = [UIFont italicSystemFontOfSize:14];
cell.detailTextLabel.textColor = [UIColor groupTableViewBackgroundColor];
if (indexPath.row == 0)
{
cell.textLabel.text = [dataArray objectAtIndex:indexPath.row];
cell.detailTextLabel.text = @"bitte wählen...";
if (issueImageView.image != nil)
{
cell.imageView.image = issueImageView.image;
cell.detailTextLabel.text = @"ausgewählt";
cell.detailTextLabel.textColor = [UIColor colorWithRed:0.3 green:0.5 blue:1 alpha:1];
}
}
else if(indexPath.row == 1)
{
cell.textLabel.text = [dataArray objectAtIndex:indexPath.row];
cell.detailTextLabel.text = @"bitte wählen...";
if (self.report.category !=nil)
{
cell.detailTextLabel.text = self.report.category;
cell.detailTextLabel.textColor = [UIColor colorWithRed:0.3 green:0.5 blue:1 alpha:1];
}
}
else if(indexPath.row == 3)
{
CGRect commentRect = CGRectMake(10, 10, 120, 20);
UILabel *commentLabel = [[UILabel alloc] initWithFrame:commentRect];
commentLabel.text = @"Kommentar";
commentLabel.font = [UIFont boldSystemFontOfSize:16];
commentLabel.backgroundColor = [UIColor clearColor];
//[cell setUserInteractionEnabled:NO];
[cell.contentView addSubview:commentLabel];
commentTextView = [[UITextView alloc] initWithFrame:CGRectMake(13, 37, 275, 71)];
[commentTextView setDelegate:self];
UITextField* roundRect = [[UITextField alloc] initWithFrame:CGRectMake(10, 35, 280, 75)];
[roundRect setBorderStyle:UITextBorderStyleRoundedRect];
roundRect.enabled = NO;
[commentTextView setFont:[UIFont fontWithName:@"American Typewriter" size:14]];
[commentTextView setBackgroundColor:[UIColor colorWithRed:0.8 green:0.6 blue:0.3 alpha:1]];
[roundRect setBackgroundColor:[UIColor colorWithRed:0.8 green:0.6 blue:0.3 alpha:1]];
[cell.contentView addSubview:roundRect];
[cell.contentView addSubview:commentTextView];
}
else
{
cell.textLabel.text =[dataArray objectAtIndex:indexPath.row];
}
return cell;
}
#pragma mark - Table view delegate
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
if (indexPath.row == 0)
{
UIImagePickerController *picker = [[UIImagePickerController alloc] init];
picker.delegate = self;
if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera])
{
picker.sourceType = UIImagePickerControllerSourceTypeCamera;
[self presentModalViewController:picker animated:YES];
}
else
{
picker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
[self presentModalViewController:picker animated:YES];
}
}
else if(indexPath.row == 1)
{
[self presentModalViewController:categoryView animated:YES];
}
else if(indexPath.row == 3)
{
[tableView deselectRowAtIndexPath:indexPath animated:YES];
[commentTextView becomeFirstResponder];
}
}
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
if (indexPath.row == 3)
{
return 120;
}
else
{
return 40;
}
}
#pragma mark - UIImagePickerController Delegate
-(void)imagePickerControllerDidCancel:(UIImagePickerController *)picker
{
[picker dismissModalViewControllerAnimated:YES];
}
-(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
{
[picker dismissModalViewControllerAnimated:YES];
//NSLog(@"Image: %@",[info objectForKey:@"UIImagePickerControllerOriginalImage"]);
issueImageView.image = [info objectForKey:@"UIImagePickerControllerOriginalImage"];
}
-(void)textViewDidBeginEditing:(UITextView *)textView
{
UIBarButtonItem* doneItem = [[UIBarButtonItem alloc] initWithTitle:@"Fertig"
style:UIBarButtonItemStyleDone
target:self
action:@selector(doneAction:)];
self.navigationItem.rightBarButtonItem = doneItem;
[doneItem setStyle:UIBarButtonItemStyleDone];
}
-(void)doneAction:(id)sender
{
[commentTextView resignFirstResponder];
self.navigationItem.rightBarButtonItem = nil;
}
- (void)textViewDidEndEditing:(UITextView *)textView
{
[commentTextView resignFirstResponder];
self.navigationItem.rightBarButtonItem = nil;
}
@end
Ich hoffe mir kann dann jemand etwas dazu sagen, wenn noch Quellcode erforderlich ist poste ich noch mehr oder lad das ganze projekt hoch.
Für Fragen, Anregungen, Kritik... bin ich auch jederzeit dankbar.
Viele Grüße, Chris