EditButton in TableView

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • EditButton in TableView

    Hallo Experten,

    ich lese nun schon eine Weile in diesem Forum und habe auch schon einige gute Hinweise gefunden. Nun bin ich an einem Punkt angekommen wo ich Hilfe brauche.

    Mein RootViewController enthält eine Tabbar, die wiederum die einzelnen Views aus Nib's darstellt. Das funktioniert auch wie es soll. In einem Tab wird ein TableView dargestellt. Für dieses TableView hätte ich nun gerne eine Toolbar mit den Buttons + und Edit. Leider kriege ich das nicht hin. Im Interfacebuilder kann zwar unter Top Bar der Platz für eine NavigationBar vorgesehen werden, aber es ist nicht möglich dort eine ToolBar abzulegen. Auch das direkte einblenden der Buttons per Code klappt nicht.

    self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAdd target:self action:@selector(addClicked)];
    self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(doneClicked)];

    Ebenso ohne Erfolg:
    [super setEditing:YES animated:YES];

    In beiden Fällen wird keine Toolbar dargestellt. Dann habe ich einfach die Toolbar in einem SubView dargestellt (Aufruf in viewDidLoad des TableViewControllers).

    navBarDone = [[NavBarDoneController alloc] initWithNibName:nil bundle:nil];
    navBarDone.delegate = self;
    navBarEdit = [[NavBarEditController alloc] initWithNibName:nil bundle:nil];
    navBarEdit.delegate = self;

    navControllerDone = [[UINavigationController alloc] initWithRootViewController:navBarDone];
    navControllerEdit = [[UINavigationController alloc] initWithRootViewController:navBarEdit];

    [self.view addSubview:[navControllerDone view]];
    [self.view addSubview:[navControllerEdit view]];

    Jetzt habe ich zwar die gewünschte Funktion bezüglich der ToolBar, kann aber im TableView keine Zeile mehr auswählen.

    Ich hoffe die Infos sind ausreichend, für einen Tipp der zur Lösung führt.

    Gruß Berthold
  • Du solltest den NavigationController im Interface Builder in den TabBarController legen. Da legst Du dann Deinen TableViewController rein. Die NavigationItems kannst Du auch direkt über den Interface Builder konfigurieren, in dem Du einen Doppelklick auf den Controller machst und die BarItems auf die NavigationBar ziehst.
    „Meine Komplikation hatte eine Komplikation.“
  • Hi Berthold,

    wenn es wirklich nur um die Buttons "+" und "Edit! geht,dann würde ich es aber Styleguide konform machen und den Standard Tableview-Edit-Modus benutzen. Ist auch viel einfacher als alles selbst zu basteln

    Gruß

    Claus
    2 Stunden Try & Error erspart 10 Minuten Handbuchlesen.

    Pre-Kaffee-Posts sind mit Vorsicht zu geniessen :)
  • Hi macmoonshine und Claus,

    danke für die Tipps. Ich habe den NavigationController jetzt wie von macmoonshine vorgeschlagen im TabBarController des RootViewControllers untergebracht. Die Buttons werden im viewDidLoad des TableViewControllers eingebaut. Jetzt läuft alles wie geplant.

    Noch eine Frage an Claus. Wie wird der Editmodus des TableViews aktiviert???
    [super setEditing:YES animated:YES]; wäre es doch gewesen, oder???

    Gruß Berthold
  • Hi Berthold,

    du musst dafür einfach die entsprechenden Delegate Methoden implementieren. Am einfachsten ist es vlt du legst Dir ein neues Navigation-Based Project an und schaust mal was da alles für Methoden in dem Source sind. Also Du brauchst auf jeden Fall

    Quellcode

    1. - (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath
    2. {
    3. if (indexPath.row == [rootDataList filterCount])
    4. {
    5. return UITableViewCellEditingStyleInsert;
    6. }
    7. else
    8. {
    9. return UITableViewCellEditingStyleDelete;
    10. }
    11. }
    12. - (void)setEditing:(BOOL)editing animated:(BOOL)animated
    13. {
    14. [super setEditing:editing animated:animated];
    15. [self.tableView setEditing:editing animated:YES];
    16. }
    17. // Override to support editing the table view.
    18. - (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
    19. {
    20. if (editingStyle == UITableViewCellEditingStyleDelete)
    21. {
    22. // Delete the row from the data source
    23. }
    24. else if (editingStyle == UITableViewCellEditingStyleInsert)
    25. {
    26. // add new data
    27. }
    28. }
    Alles anzeigen


    und den Edit machst Du dann ganz normal über selectrowatindexpath, solange du im edit mode bist. Dafür brauchst dann aber auch noch den


    self.tableView.allowsSelectionDuringEditing = YES;


    Gruß

    Claus
    2 Stunden Try & Error erspart 10 Minuten Handbuchlesen.

    Pre-Kaffee-Posts sind mit Vorsicht zu geniessen :)
  • Hi Claus,

    danke für die Erklärung. Ich werde das Ganze die Tage nochmals ausprobieren.
    Als ich nur den TableView verwendet habe, funktionierte auch alles. Erst nachdem ich den TableView in den TabBarController des RootViewControllers integriert habe, erschien die ToolBar mit dem EditButton nicht mehr.
    Es kann also eigentlich nicht nur am Delegate liegen, da ich dort nichts verändert habe. Es sei denn der Delegate hätte dann auch im TabBarController implementiert werden müssen.

    In jedem Fall habe ich durch eure Hinweise das Problem schnell gelöst, nachdem ich gestern viele Stunden im Nebel gestochert habe.

    Nochmals vielen Dank.

    Gruß Berthold