2011-09-12 15 views
19

Come si può implementare un pulsante sulla barra di navigazione in cui l'utente sarebbe in grado di riordinare le righe di un UITableView &?Pulsante Modifica UITableView/Done

Devo creare il mio pulsante della barra degli strumenti per avere il pulsante Modifica/Fine per UITableView?

risposta

44

Basta aggiungere questa linea in viewDidLoad della vostra UITableViewController

self.navigationItem.leftBarButtonItem = self.editButtonItem; 

Esso funziona se la vostra visualizzazione della tabella superview è UINavigationController. Questa linea aggiungerà il pulsante che spingerà la tabella in modalità di modifica e fuori da essa.

+0

ho provato, anche se il pulsante è lì, ma non spinge la mia tableView dentro e fuori dalla modalità di modifica. C'è una chiamata delegata che devo gestire? –

+1

è il controller di visualizzazione di una sottoclasse di uitableviewcontroller – Robin

+0

@robin. No, non è vero. –

20

Ciò che generalmente fatto è di creare il proprio personalizzato BarbuttonItem e quindi assegnare questo tasto come giusto oggetto pulsante di barra di navigazione:

UIBarButtonItem *barButtonItem=[[UIBarButtonItem alloc]initWithTitle:@"Edit" 
                   style:UIBarButtonItemStylePlain 
                   target:self 
                   action:@selector(toggleEdit)]; 

self.navigationItem.rightBarButtonItem = barButtonItem; 
[barButtonItem release]; 

Ecco il metodo toggleEdit:

-(void)toggleEdit{ 
      [self.tableView setEditing:!self.tableView.editing animated:YES]; 

      if (self.tableView.editing) 
       [self.navigationItem.rightBarButtonItem setTitle:@"Done"]; 
      else 
      [self.navigationItem.rightBarButtonItem setTitle:@"Edit"]; 
} 
0

Se volete che il vostro pulsante per passare tra il colore blu "Fatto" e il colore "Modifica" semplice, è possibile impostare il parametro RightBarButtonItem su UIBarButtonItemStyleDone per il blu o UIBarButtonItemStylePlain per plain come questo

self.navigationItem.rightBarButtonItem.style = UIBarButtonItemStyleDone; 
6
UIButton *btnname=[UIButton buttonWithType:UIButtonTypeSystem]; 
[btnname setFrame:CGRectMake(0,0,110,35)]; 
[btnname setFont:[UIFont boldSystemFontOfSize:18]]; 
[btnname setTitle: @"Delete" forState: UIControlStateNormal]; 
[btnname setTitleColor:UIColorFromRGB(0xCC0707)  forState:UIControlStateNormal]; 
btnname.backgroundColor=UIColorFromRGB(0xE6E7E8); 
btnname.showsTouchWhenHighlighted = YES; 
[btnname addTarget:self 
      action:@selector(toggleEdit) 
forControlEvents:UIControlEventTouchDown]; 
UIBarButtonItem *barItem = [[UIBarButtonItem alloc] initWithCustomView:btnname]; 
self.navigationItem.rightBarButtonItem = barItem; 


-(void)toggleEdit{ 
    [self.tableView setEditing:!self.tableView.editing animated:YES]; 

    if (self.tableView.editing) 
     [btnname setTitle: @"Done" forState: UIControlStateNormal]; 
    else 
     [btnname setTitle: @"Delete" forState: UIControlStateNormal]; 
} 
+0

Questo è lavoro per me .. – Saravanan

4

Ecco una versione Swift che ho usato:

func clickedEditButton(button: UINavigationItem) { 
    tableView.setEditing(!tableView.editing, animated: true) 

    if tableView.editing { 
     button.rightBarButtonItem?.title = "Done" 
    } else { 
     button.rightBarButtonItem?.title = "Edit" 
    } 
} 
0

Assicurarsi è necessario inizializzare il titolo prima. Con storyboard,

enter image description here

dopo che,

@IBAction func editBtnPressed(_ sender: UIBarButtonItem) { 
     tableView.setEditing(!tableView.isEditing, animated: true) 

     if tableView.isEditing { 
      self.editButton.title = "Done" 
     } else { 
      self.editButton.title = "Edit" 
     } 
    } 
Problemi correlati