Mam problem z UITableView's
didSelectRowAtIndexPath
.
Moja tabela jest skonfigurowana tak, że kiedy wybieram wiersz, inicjuje nowy kontroler widoku i wypycha go.
Przy pierwszym dotknięciu dowolnego wiersza w tabeli metoda nie zostaje wywołana. Po wybraniu innego wiersza zaczyna on działać normalnie.
Sprawdziłem to, ustawiając punkt przerwania na didSelectRowAtIndexPath
. Podczas dodawania NSLog
do metody widzę, że kiedy wybieram drugi wiersz, który w końcu wypycha nowy kontroler widoku, widzę dwie instrukcje dziennika wyświetlane jednocześnie w konsoli.
Jakieś sugestie?
uitableview
cocoa-touch
uikit
didselectrowatindexpath
Mark Adams
źródło
źródło
tableView:didSelectRowAtIndexPath:
?Odpowiedzi:
Czy przypadkiem wpisałeś przypadkiem De selectRowAtIndexPath?
źródło
Sprawdź także właściwość wyboru widoku tabeli w pliku xib. W razie potrzeby użyj opcji „Wybór pojedynczy” lub „Wybór wielokrotny”.
źródło
Wystąpił następujący problem:
W moim przypadku mój błąd sprawdzał się
Show Selection on Touch
w Konstruktorze interfejsów. Możesz odznaczyć to w IB tutaj:Mam nadzieję, że komuś pomoże
źródło
Sprawdź, czy w swojej klasie ustawiłeś jakieś rozpoznawanie gestów. Gest usuwania działał dla mnie.
źródło
Zastanawiałem się nawet nad opublikowaniem tej odpowiedzi, ponieważ uważam, że gwiazdy są w pewnym sensie wyrównane, aby to się objawiło.
Mam odmianę tego problemu i sprawdziłem inne rozwiązania. W moim widoku tabeli nie przetwarza ostatniego wiersza mojego stołu przy pierwszym dotknięciu. Podkreśla to, ale
didSelectRowAtIndexPath
nie jest nazywany. Wszystkie pozostałe rzędy działają dobrze. Ale jeśli włączę odbijanie widoku tabeli, wydaje się to rozwiązać problem (ale wtedy musisz poradzić sobie z odbiciem widoku tabeli).źródło
UITableViewCellSelectionStyleNone został ustawiony dla komórki wyświetlającej ten problem (ios9).
Skończyło się na dzwonieniu
pierwsza rzecz w
co nie jest takie samo, ale wystarcza. zastanawiam się, jaki rodzaj zepsucia stołu przynosi ios10.
źródło
setSelected
ale gdy użytkownik trzyma komórkę, pojawia się wybór, który jest niedopuszczalnySWIFT 2
Upewnij się, że masz ustawioną wartość true:
self.tableView.allowsSelection = true
Umieść to nad swoim tuż po swoim
viewDidLoad()
i przedsuper.viewDidLoad()
źródło
SWIFT 3
Jeśli pracujesz z Swift 3 w klasie, która nie jest
UITableViewController
i używaszUITableViewDelegate
, być może będziesz musiał użyć metody method:To działało dla mnie, chociaż właśnie migrowałem swój projekt do Swift 3. Jest to dość nowy, więc można to naprawić później.
źródło
Jeśli ustawiłeś dowolny UITapGestureRecognizer w swojej klasie, możesz dodać ten wiersz w didSelectRowAtIndexPath:
To zadziałało dla mnie.
źródło
ten problem występuje również podczas pracy z narzędziem rozpoznającym gesty w tabeli. W tym przypadku nie trzeba ich usuwać, wystarczy jedynie upewnić się, że właściwość gestu
cancelsTouchesInView = false
jest wartością logiczną, która wpływa na to, czy poprawki są dostarczane do widoku, gdy gest jest rozpoznawany.źródło
SWIFT 3
Żadna z pozostałych odpowiedzi nie działała w moim przypadku, co naprawiło to dla mnie:
tableView.delaysContentTouches = false
źródło
didSelectRowAt
funkcja nie została wywołana w mojej aplikacji po pierwszym lub drugim dotknięciu ... Próbowałem rozwiązać problem, nie mogłem znaleźć żadnego rozwiązania. Ale nagle zostałem rozpoznany, korzystałem z view.animation zmiana koloru ...Delegate
metoda nie została wywołana, dopóki animacja trwaźródło
W moim przypadku miałem nagłówek sekcji UITableView z rozpoznawaczem gestów. Kiedy nagłówek jest stuknięty, powinien wstawić kilka wierszy do tej sekcji i animować wstawianie (jak sekcja rozwijania / zwijania). Po pierwszym rozwinięciu i dotknięciu metoda delegowania didSelectRow nie została uruchomiona. W przypadku kolejnych dotknięć i akcji rozwijania / zwijania działało to zgodnie z oczekiwaniami.
Na odpowiedź @Ayoub Nouri ustawiłem cancelsTouchesInView na false, co rozwiązało problem. tapGestureRecognizer? .cancelsTouchesInView = false
źródło
Szybki 4.2
Wyłączenie „Opóźnij przyziemienie” w inspektorze atrybutów rozwiązało problem.
Następnie kliknięcia są płynne, a didSelectRowAt odpala natychmiast.
źródło
To, co zadziałało, to zacząłem pisać „didSelect ...”, a następnie pozwolić autokorekcie wypełnić resztę. Najwyraźniej jakiś szczegół mojej składni był niepewny. Jak powiedzieli inni, użyj IDE !!
źródło