W skrócie: w jaki sposób mogę zapobiec wpływaniu zaznaczenia komórki widoku kolekcji na stan zaznaczenia komórek widoku tabeli znajdujących się w tej komórce widoku kolekcji?
Mam UICollectionView, w którym komórki są wyświetlane na pełnym ekranie po wybraniu. Komórki zawierają UITableView, który wyświetli informacje o użyciu.
Problemem jest to, że komórki wwidok tabeli jest wyświetlany tak, jakby był wybrany. Poruszyłem kilka rzeczy, aby wyświetlać komórkę na pełnym ekranie przez cały czas, co pozwoliło mi potwierdzić: kiedy komórka widoku kolekcji jest zaznaczona, komórki widoku tabeli wewnątrz niej są również wyświetlane z wybranym stylem.
Zauważ, że mówię, że są wyświetlane z wybranym stylem, i nie są wybrane. Jeśli chodzi o widok tabeli, to są nie wybrany.
[tableView indexPathsForSelectedRows];
nie zwraca ścieżek indeksu. tableView:willSelectRowAtIndexPath:
- z którego mógłbym zwrócić zero - nigdy nie jest nazywany. Można śmiało powiedzieć, że widok tabeli nie postrzega własnych komórek jako wybranych.
Ale mogę potwierdzić w Reveal, że widok tabelikomórki zawierają wybrany widok tła (patrz ostatni zrzut ekranu poniżej). Dotyczy to tylko komórek widoku tabeli, które są widoczne po wybraniu komórki widoku kolekcji: nie dzieje się tak w przypadku komórek, które znajdują się wystarczająco daleko na liście, aby początkowo być poza ekranem.
Mogę ukryć problem za pomocą cell.selectionStyle = UITableViewCellSelectionStyleNone;
i ostatecznie może to być moje rozwiązanie: komórki widoku tabeli i tak nie będą wybierane, więc pomalowanie takiego problemu powinno działać w mojej sytuacji.
Ale to nie odpowiada na większe pytanie: co do cholery tu się dzieje?
Zrzuty ekranu
Normalna komórka widoku kolekcji (cała ta sprawa to jedna komórka):
Komórka wybranego widoku kolekcji, z szarym stylem zaznaczonym w widoku tabeli w obrębie:
Ujawnij, pokazując wybrany widok tła. W tym przypadku komórka tabeli zawierająca przycisk Usuń nie była widoczna po wybraniu komórki widoku kolekcji, więc nie uzyskała stylu selekcji, tak jak komórki powyżej:
Odpowiedzi:
1 dla odpowiedzi № 1Najwyraźniej jest to oczekiwane zachowanie w iOS 7. setHighlighted:
jest wywoływany we wszystkich podviewach, które go obsługują.
1 dla odpowiedzi nr 2
Przesłoniłem UITableViewCell
w ten sposób
func setHighlighted(_ highlighted: Bool, animated: Bool)
{
//Leave Empty
}
Zachowanie Apple może być prawidłowe, ponieważ w ten sposób można pominąć iterację na wszystkich elementach podrzędnych i ręcznie ustawić właściwość, ale dlaczego nie mogę wybrać, jeśli chcę to zrobić za pomocą UICollectionViewDelegate
metoda?
func collectionView(_ collectionView: UICollectionView, shouldHighlightItemAt indexPath: IndexPath) -> Bool