Editierbare TextView mit Second NavBar - Text erscheint, aber zu spät.Editierbare TextView mit Second NavBar - Text erscheint, aber zu spät
Die App hat einen einzigen Navigationscontroller. Ich habe eine iPhone App, die im Grunde drei Ebenen hat.
Level 1 - Tabelle mit Kategorienamen
Stufe 2 - Tabelle mit einer Liste von Produkten für die ausgewählte Kategorie
Level 3 - Tabbed-Ansicht mit verschiedenen Ansichten, einschließlich UITextView für Einzelheiten Artikel Einer dieser Tabbed Views mit einer TextView ist editierbar.
Wenn der Benutzer die editierbare TextView antippt, erscheint das KeyBoard . Der Benutzer kann TextView eingeben. Zeichen erscheinen , wie sie eingegeben werden.
An der Spitze dieser Level 3 TextView befindet sich eine NavBar (vorhanden für alle 3 Ebenen mit Änderungen) mit einem BackButton und einem "home-> Level1" Button auf der rechten Seite.
Alle funktioniert gut, bis in die editierbare Textview ich eine zweite navigationbar unter dem bestehenden NavBar hinzufügen. Diese zweite NavBar hat zwei Tasten . Sie sind Speichern/Abbrechen.
Wenn ich auf diese Schaltflächen zum Speichern und Abbrechen klicke, werden die richtigen Methoden erreicht. Alles ist perfekt mit einer Ausnahme. Der eingegebene Text erscheint nicht in der Textansicht, bis entweder die Schaltfläche Speichern oder Abbrechen berührt wird. Die relevanten Tasteneinstellungen und Aktionsmethoden in meinem TabViewController.m
sind unten. Ich muss diese Daten persistieren.
Ich dachte, dass eine Benachrichtigung von der TextView und der Aktion handleTextChange bekommen würde, aber kein Glück. Ich stecke fest.
.........
- (void)loadView {
self.myTextView = [[UITextView alloc] init];
self.myTextView.delegate = self;
self.view = self.myTextView;
//UITextViewTextDidChangeNotification
NSNotificationCenter *nc = [NSNotificationCenter defaultCenter];
[nc addObserver:self
selector:@selector(handleTextChange:)
name:UITextViewTextDidChangeNotification
object:nil];
NSLog(@"Registered DG_HandleChangeTextNotification with notification center.");
}
- (void)handleTextChange:(NSNotification *)note
{
[self.myTextView setNeedsDisplay] ;
NSLog(@"...Handled Text Change.");
}
- (void)textViewDidBeginEditing:(UITextView *)textView
{
// provide my own Done/Save button to dismiss the keyboard
saveNavigationBar = [[UINavigationBar alloc] initWithFrame:CGRectMake(0, 0, 320, 44)];
saveNavigationBar.barStyle = UIBarStyleBlackOpaque;
UINavigationItem *doneItem = [[UINavigationItem alloc] init];
doneItem.title = @"My Notes";
UIBarButtonItem *doneItemButton = [[UIBarButtonItem alloc]
initWithBarButtonSystemItem:UIBarButtonSystemItemSave
target:self action:@selector(saveAction:)];
UIBarButtonItem *cancelItemButton = [[UIBarButtonItem alloc]
initWithBarButtonSystemItem:UIBarButtonSystemItemCancel target:self
action:@selector(cancelAction:)];
[doneItem setRightBarButtonItem:doneItemButton animated:NO];
[doneItem setLeftBarButtonItem:cancelItemButton animated:NO];
[saveNavigationBar pushNavigationItem:doneItem animated:NO];
[self.view addSubview:saveNavigationBar];
[doneItem release];
[cancelItemButton release];
[doneItemButton release];
}
- (void)saveAction:(id)sender
{
// finish typing text/dismiss the keyboard by removing it as the first responder
self.text = self.myTextView.text;
[self.saveNavigationBar removeFromSuperview];
[self.myTextView resignFirstResponder];
}
- (void)cancelAction:(id)sender
{
[self.saveNavigationBar removeFromSuperview];
[self.myTextView resignFirstResponder];
}
Die zweite NavBar versteckte den Bereich des UITextEdit so, dass ich etwa vier Zeilen eingeben musste, bevor ich den Text sah. Ich glaube, ich muss die Höhe des UITextEdit um 44 Pixel verringern. – mbarron