Czy istnieje sposób na ukrycie przycisku „-” (Usuń) podczas edycji UITableView

97

W mojej aplikacji na iPhone'a mam UITableView w trybie edycji, w którym użytkownik może tylko zmieniać kolejność wierszy, nie ma uprawnień do usuwania.

Czy jest więc sposób, w jaki mogę ukryć czerwony przycisk "-" w TableView. Proszę daj mi znać.

Dzięki

iPhoneDev
źródło

Odpowiedzi:

258

Oto moje kompletne rozwiązanie, bez wcięcia (wyrównanie do lewej) komórki!

- (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
źródło
43

Swift 3 odpowiednik zaakceptowanej odpowiedzi z tylko potrzebnymi funkcjami:

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

func tableView(_ tableView: UITableView, editingStyleForRowAt indexPath: IndexPath) -> UITableViewCellEditingStyle {
    return .none
}
antoine
źródło
4

To zatrzymuje wcięcie:

- (BOOL)tableView:(UITableView *)tableview shouldIndentWhileEditingRowAtIndexPath:(NSIndexPath *)indexPath {
    return NO;
}
sethtc
źródło
3

Napotkałem podobny problem, w którym chciałem, aby niestandardowe pola wyboru pojawiały się w trybie edycji, ale nie przycisk usuwania „(-)”.

Odpowiedź Stefana poprowadziła mnie we właściwym kierunku.

Utworzyłem przycisk przełączania i dodałem go jako editAccessoryView do komórki i podłączyłem do metody.

- (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;
}

Zaimplementowano te metody delegatów

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

- (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath {
    return UITableViewCellEditingStyleNone;
}
srik
źródło
0

Gdy chcesz tylko ukryć kropkę (-) podczas edycji, ale możesz chcieć zachować funkcję usuwania dla użytkowników, zaimplementujesz to w taki sposób w UITableViewDelegateklasie zgodnej z protokołem

- (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath {
    if (self.editing) return UITableViewCellEditingStyleNone;
    return UITableViewCellEditingStyleDelete;
}
Ol Sen
źródło