2016-04-02 6 views
0

Ich habe etwas Code, der barbuttonitem Edit erstellt und wenn Sie darauf klicken und mit der Bearbeitung beginnen, ändert sich die Schaltfläche zu Done.IOS: Zurücksetzen der Aktion von UIBarButtonItem, nachdem sie erstellt wurde?

Wenn ich zuerst die Schaltfläche erstelle, setze ich ihre Aktion auf Bearbeiten. Sobald der Benutzer jedoch bearbeitet, möchte ich die Aktion der umbenannten Schaltfläche in Speichern ändern.

Ich dachte, ich hätte Save Feuern, aber irgendwo auf der Linie funktioniert es möglicherweise nicht, wenn ich eine Methode in der Mitte hinzugefügt habe, um die Schaltfläche zu aktivieren und zu deaktivieren.

Kann jemand den richtigen Weg vorschlagen, um die Aktion eines Balkenknopfes zu ändern?

Hier ist mein Code:

//code to create button which sets action to gotoEdit method 
     UIBarButtonItem *editButton = [[UIBarButtonItem alloc] initWithTitle:@"Edit" style:UIBarButtonItemStylePlain target:self action:@selector(gotoEdit)]; 
      self.navigationItem.rightBarButtonItem = editButton; 
     } 
    -(void) gotoEdit { 
     self.navigationItem.rightBarButtonItem.title = @"Done"; 
     _editButton.target = self; 
     _editButton.action = @selector(save);//changes action to save method 
//some other code to make a textview editable, change its background color and so forth. 
     } 
-(void) save { 
NSLog(@"save method firing"); 
} 
//I added the following methods at about the same time the save method stopped firing but not sure if they are related. (Probably not but including them anyway.) 
    //detect change on screen 
    - (void)textViewDidChange:(UITextView *)textView{ 
     self.didChange=YES; 
     [self updateSaveButton]; 
    } 
    -(void) updateSaveButton 
    { 
     self.editButton.enabled = (_didChange == TRUE); 
    } 
+0

Dieser Link hilft Ihnen kann: http://stackoverflow.com/a/36046263/3918500 –

+0

für den von Ihnen angegebenen Code funktioniert, die einzige Änderung, die ich bemerke, ist in dem Sie haben ein lokales Objekt für 'UIBarButtonItem' erstellt und in der' gotoEdit' Methode, die Sie versuchen, ein globales Objekt zu erhalten, hat die folgende Methode nichts mit der Speicheraktion zu tun – HardikDG

Antwort

1

Es ist besser, ein bool zu verwenden, anstatt das Hinzufügen und Entfernen der Klage der Taste.

-(void) gotoEdit { 
    if(!isEditing){ 
     // Prep for editing 
     self.navigationItem.rightBarButtonItem.title = @"Done"; 
     isEditing = true; 
    }else{ 
     // Prep for saving 
     self.navigationItem.rightBarButtonItem.title = @"Edit"; 
     isEditing = false; 
    }  
} 

Für die Zukunft Sie einer Schaltfläche Wähler wie folgt entfernen:

[_editButton removeTarget:self 
       action:@selector(gotoEdit) 
    forControlEvents:UIControlEventTouchUpInside]; 
Verwandte Themen