2013-08-26 6 views
7

Jeśli zauważysz w aplikacji kontaktów na iPada po dotknięciu ikony edycji "+", aby dodać nowy adres, komórka nie rozwinie się w lewo, gdy ikona zniknie (patrz zrzut 1. ekranu poniżej). Próbuję zrobić coś podobnego, ale nie mam szczęścia (zobacz poniżej zrzut ekranu z drugiego ekranu). Próbowałem użyć proponowanego rozwiązania here, ale nie działało.jak zapobiec rozszerzaniu się szerokości komórki po zakończeniu edycji w UITableView

Do celów rejestracyjnych nie próbuję replikować rzeczywistej aplikacji kontaktów ani integrować się z kontaktami. Pracujemy nad czymś niezwiązanym, a mój projektant po prostu chce podążać tym śladem, wykonując pracę z POC, aby zobaczyć, co mogę zrobić.

EDYCJA - Kolejne pytanie, aby zweryfikować moje myślenie, polega na tym, że w aplikacji Kontakty o tym, co się dzieje, gdy ikona "+" jest dotknięta, ta komórka nie jest już edytowana, te pola tekstowe są dodawane do komórka, etykieta zmieniła się, a następnie polecenie reloadData zostało wywołane, prawda?

EDYCJA - Dzięki za sugestię Tim, już prawie jestem! Właściwie to wymyśliłem 1/2, ale potem wpadłem na problem, że ikona "+" nie ożywiła się, po prostu nagle znikała. Tak więc dodałem polecenie reloadRows ... call to commitEditingStyle, ale teraz cała komórka znika. Tu jest mój kodu:

- (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    UITableViewCellEditingStyle editingStyle = UITableViewCellEditingStyleNone; 
    if (self.showEditingIcon) { 
     editingStyle = UITableViewCellEditingStyleInsert; 
     self.showEditingIcon = NO; 
    } 
    return editingStyle; 
} 

- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    // tableView.editing = NO; 
    // tableView.editing = YES; 
    [self.tableView reloadRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade]; 
} 

Widać z moich zakomentowanych linii co miałem pierwotnie, który pracował, ale jak już mówiłem, nie było animowanie - przycisk „+” Po prostu nagle znikają. Jeśli spróbuję zadzwonić [tableView setEditing: NO animated: YES] to nie zadziała. Kiedy próbowałem umieścić te wywołania w bloku animacji UIView, nie wyglądało to dobrze - widziałem komórkę tymczasowo przesuwającą się w lewo i w tył. Jednak teraz, po ponownym wczytaniu, komórka znika całkowicie. W tej chwili nie wprowadzam żadnych zmian w mojej komórce (na przykład nie dodaję pól tekstowych, itp.), Ponieważ chcę tylko, aby przycisk "+" animował się bez powiększania lewej komórki przez komórkę w pierwszej iteracji.

Każda pomoc bardzo ceniona. Dzięki.

enter image description here enter image description here

Odpowiedz

2

Sztuką jest, aby zawsze być w trybie edycji, tak że Wcięcia komórka pozostaje stała. Kiedy komórka jest załadowany, można zdecydować, co państwo to i powrócić odpowiedni styl edycji, albo „insert” styl lub „none”:

- (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    BOOL shouldShowInsertButton = ...;//check internal state for cell 
    return shouldShowInsertButton ? UITableViewCellEditingStyleInsert : UITableViewCellEditingStyleNone; 
} 

Następnie po naciśnięciu przycisku edycji jest na podsłuchu, aktualizować swoje wewnętrzne stan i przeładowanie komórek:

- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    ...;//update internal state for cell 
    [self.tableView reloadRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade]; 
} 

EDIT

Oto pracuje sample project.

+0

To jest fantastyczne - jestem prawie na miejscu, ale wpadam na coś dziwnego. Kiedy używam poniższego kodu, moja cała komórka po prostu znika. Ups, zamierzam edytować i uwzględnić to, o czym mówię w moim oryginalnym wpisie. – fogwolf

+0

Dodano działający przykładowy projekt. Nadzieja, która pomaga. –

+0

Bardzo dziękuję! Sprawdź to teraz. W międzyczasie dodano edycję do mojego pierwotnego ogłoszenia. – fogwolf