2009-05-25 5 views
0

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.

  1. Level 1 - Tabelle mit Kategorienamen

  2. Stufe 2 - Tabelle mit einer Liste von Produkten für die ausgewählte Kategorie

  3. 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]; 

} 
+0

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

Antwort

0

Der Zweite NavBar versteckte den Bereich des UITextEdit , so dass ich über vier Zeilen schreiben hatte, bevor ich den Text sah. Ich glaube, Ich muss die Höhe des UITextEdit um 44 Pixel senken.