Pracuję nad projektem, w którym muszę wstępnie wybrać konkretną komórkę.
Mogę wstępnie wybrać komórkę za pomocą -willDisplayCell
, ale nie mogę jej odznaczyć, gdy użytkownik kliknie inną komórkę.
- (void)tableView:(UITableView*)tableView
willDisplayCell:(UITableViewCell*)cell
forRowAtIndexPath:(NSIndexPath*)indexPath
{
AppDelegate_iPad *appDelegte =
(AppDelegate_iPad *)[[UIApplication sharedApplication] delegate];
if ([appDelegte.indexPathDelegate row] == [indexPath row])
{
[cell setSelected:YES];
}
}
- (void)tableView:(UITableView *)tableView
didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
AppDelegate_iPad *appDelegte =
(AppDelegate_iPad *)[[UIApplication sharedApplication] delegate];
NSIndexPath *indexpath1 = appDelegte.indexPathDelegate;
appDelegte.indexPathDelegate = indexPath;
[materialTable deselectRowAtIndexPath:indexpath1 animated:NO];
}
Możesz pomóc?
Odpowiedzi:
użyj tego kodu
Swift 3.0:
źródło
willSelectRowAt:
.Użyj następującej metody w widoku tabeli delegata
didSelectRowAtIndexpath
(lub z dowolnego miejsca)źródło
indexPathForSelectedRow
jest to metoda, a nie właściwość.[myTable indexPathForSelectedRow]
. Wcześniej zapętlałem komórki. Dzięki!Spróbuj tego:
źródło
W tym celu przydatne może być rozszerzenie w Swift.
Swift 4 i Swift 5:
Szybkie rozszerzenie (np. W pliku UITableViewExtension.swift):
Użyj np .:
źródło
viewWillAppear()
metodzie pomaga użytkownikowi zrozumieć, skąd wraca.Sprawdź, czy metoda delegowania jest poprawna, czy nie. Na przykład;
dla
źródło
Swift 4:
źródło
To rozwiązanie dla Swift 4
poprostu dodaj
To działa jak urok
przykład:
źródło
Oprócz ustawienia komórki jako wybranej, musisz również poinformować tableView, że komórka jest wybrana. Dodaj wywołanie do
-tableView:selectRowAtIndexPath:animated:scrollPosition:
swojejwillDisplayCell:
metody: będziesz mógł odznaczyć ją jak zwykle.Pamiętaj, aby użyć UITableViewScrollPositionNone, aby uniknąć dziwnego przewijania.
źródło
[cell setSelected:YES]
można to pominąć:selectRowAtIndexPath
zajmie sięselected
stanem komórkiTo powinno działać:
Upewnij się tylko, że materialTable i tableView wskazują na ten sam obiekt.
Czy materiały są podłączone do tableView w Konstruktorze interfejsów?
źródło
W oparciu o rozwiązanie saikirans napisałem to, co mi pomogło. W pliku .m:
I w pliku nagłówkowym:
Nie mam zbyt dużego doświadczenia, więc sprawdź dwukrotnie, czy nie ma wycieków pamięci itp.
źródło
Jeśli chcesz zaznaczyć dowolną komórkę tabeli za pomocą pierwszego kliknięcia i odznaczyć za pomocą drugiego, powinieneś użyć tego kodu:
źródło
Swift 4:
źródło
self.tableView(tableView, didDeselectRowAt: indexPath)
tableView.deselectRow...
Swift 2.0:
źródło
Spróbuj tego
źródło
umieść ten kod zgodnie z kodem, a komórka zostanie odznaczona.
źródło
Czy możesz tego spróbować?
To zadziałało dla mnie.
źródło
Swift 3.0:
Zgodnie z sekcją dotyczącą zgodności protokołu przewodnika po stylu ray wenderlich swift , aby zgrupować powiązane metody, umieść to rozszerzenie poniżej klasy kontrolera widoku w następujący sposób:
źródło
Szybki
źródło
źródło
Szybki 3
Natknąłem się również na to - kiedy nawigujesz lub odsuwasz się z powrotem do widoku tabeli, zwykle nie usuwa zaznaczenia wcześniej wybranego wiersza. Umieszczam ten kod w kontrolerze widoku tabeli i działa dobrze:
źródło
Szybki 3/4
W ViewController:
W komórce niestandardowej:
źródło
szybki 3.0
źródło
Aby usunąć zaznaczenie (DidDeselectRowAt), uruchamiane przy pierwszym kliknięciu z powodu wstępnie załadowanych danych; musisz poinformować tableView, że wiersz jest już zaznaczony, aby rozpocząć, więc pierwsze kliknięcie usuwa zaznaczenie wiersza:
// Swift 3:
źródło
Odkryłem, że oprócz ustawiania komórki jako wybranej , musisz poinformować widok tabeli, aby wybrać wiersz przy danej ścieżce indeksu.
źródło