Gibt es eine Möglichkeit, die Schaltfläche "-" (Löschen) während der Bearbeitung von UITableView auszublenden?

97

Auf meiner iPhone-App habe ich eine UITableView im Bearbeitungsmodus, in der der Benutzer nur die Zeilen neu anordnen darf, ohne dass eine Löschberechtigung erteilt wurde.

Gibt es also eine Möglichkeit, die rote Schaltfläche "-" in TableView auszublenden? Lass es mich wissen, bitte.

Vielen Dank

iPhoneDev
quelle

Antworten:

258

Hier ist meine vollständige Lösung ohne Einrückung (0 links ausrichten) der Zelle!

- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath {
    return YES;
}

- (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath{
    return UITableViewCellEditingStyleNone; 
}

- (BOOL)tableView:(UITableView *)tableview shouldIndentWhileEditingRowAtIndexPath:(NSIndexPath *)indexPath {
    return NO;
}


- (BOOL)tableView:(UITableView *)tableview canMoveRowAtIndexPath:(NSIndexPath *)indexPath {
    return YES;
}
Stefan von Chossy
quelle
43

Swift 3 entspricht einer akzeptierten Antwort mit nur den erforderlichen Funktionen:

func tableView(_ tableView: UITableView, shouldIndentWhileEditingRowAt indexPath: IndexPath) -> Bool {
    return false
}

func tableView(_ tableView: UITableView, editingStyleForRowAt indexPath: IndexPath) -> UITableViewCellEditingStyle {
    return .none
}
Antoine
quelle
4

Dies stoppt die Einrückung:

- (BOOL)tableView:(UITableView *)tableview shouldIndentWhileEditingRowAtIndexPath:(NSIndexPath *)indexPath {
    return NO;
}
sethtc
quelle
3

Ich hatte ein ähnliches Problem, bei dem benutzerdefinierte Kontrollkästchen im Bearbeitungsmodus angezeigt werden sollten, nicht jedoch die Schaltfläche "(-)" zum Löschen.

Stefans Antwort lenkte mich in die richtige Richtung.

Ich habe eine Umschalttaste erstellt und sie als EditingAccessoryView zur Zelle hinzugefügt und mit einer Methode verbunden.

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    ....
    // Configure the cell...

    UIButton *checkBoxButton = [[UIButton alloc] initWithFrame:CGRectMake(0.0f, 0.0f, 40.0f, 32.0f)];
    [checkBoxButton setTitle:@"O" forState:UIControlStateNormal];
    [checkBoxButton setTitle:@"√" forState:UIControlStateSelected];
    [checkBoxButton addTarget:self action:@selector(checkBoxButtonPressed:) forControlEvents:UIControlEventTouchUpInside];

    cell.editingAccessoryType = UITableViewCellAccessoryCheckmark;
    cell.editingAccessoryView = checkBoxButton;

    return cell;
}

- (void)checkBoxButtonPressed:(UIButton *)sender {
    sender.selected = !sender.selected;
}

Implementierte diese Delegatenmethoden

- (BOOL)tableView:(UITableView *)tableview shouldIndentWhileEditingRowAtIndexPath:(NSIndexPath *)indexPath {
    return NO;
}

- (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath {
    return UITableViewCellEditingStyleNone;
}
srik
quelle
0

Wenn Sie den (-) Punkt nur während der Bearbeitung ausblenden möchten, aber die Löschfunktion für die Benutzer beibehalten möchten, implementieren Sie sie wie folgt in Ihrer UITableViewDelegateprotokollkonformen Klasse

- (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath {
    if (self.editing) return UITableViewCellEditingStyleNone;
    return UITableViewCellEditingStyleDelete;
}
Ol Sen.
quelle