Próbuję przypisać UIImageView
akcję do akcji, gdy użytkownik ją stuknie.
Wiem, jak stworzyć akcję dla UIButton
, ale jak mogę naśladować to samo zachowanie UIButton
, ale używając UIImageView
?
ios
swift
uiimageview
użytkownik3706773
źródło
źródło
@objc
modyfikator do funkcji.Musisz dodać do swojego urządzenia rozpoznawanie gestów (do korzystania z UITapGestureRecognizer , do korzystania z UILongPressGestureRecognizer )
UIImageView
.I zaimplementuj metodę selektora, taką jak:
źródło
Możesz dodać a
UITapGestureRecognizer
do imageView, po prostu przeciągnij jeden do Storyboard / xib, przeciągnij Ctrl z imageView do gestRecognizer i przeciągnij Ctrl z gestRecognizer do pliku Swift, aby utworzyć plikIBAction
.Musisz także włączyć interakcje z użytkownikiem
UIImageView
, jak pokazano na tym obrazku:źródło
UIImageView
domyślnie nie reaguje na dotyk. Musisz także włączyć interakcje użytkownika.W przypadku wersji 2.0 i nowszych zrób to
źródło
Kod Swift4
Wypróbuj kilka nowych metod rozszerzenia:
Teraz, gdy chcemy dodać
UITapGestureRecognizer
doUIView
lubUIView
podklasy jakUIImageView
możemy to zrobić bez tworzenia skojarzone funkcje selektorów!Stosowanie:
źródło
Możesz po prostu ustawić obraz
UIButton
tego, co normalnie umieścisz wUIImageView
. Na przykład gdzie byś zrobił:Zamiast tego możesz użyć:
Oto, jak mógłby wyglądać Twój kod:
Wspaniałą rzeczą w tej metodzie jest to, że jeśli musisz załadować obraz z bazy danych, możesz ustawić tytuł przycisku przed ustawieniem obrazu:
Aby poinformować użytkowników, że ładujesz obraz
źródło
Musisz dodać leniwy, aby TapGestureRecognizer się zarejestrował,
ponieważ „self” w UITapGestureRecognizer (target: self ...) będzie zero, jeśli nie jest to leniwy var. Nawet jeśli ustawisz isUserInteractionEnable = true, nie zarejestruje się bez leniwego var.
źródło
Możesz umieścić
UIButton
przezroczyste tło na górzeUIImageView
i nasłuchiwać stuknięcia w przycisk przed załadowaniem obrazuźródło
Kod Swift 4
Krok 1 w ViewdidLoad ()
Krok 2 Dodaj następującą funkcję
Jest przetestowany i działa poprawnie
źródło
Sugeruję, aby umieścić niewidoczny przycisk (krycie = 0) na widoku obrazu, a następnie obsługiwać interakcję na przycisku.
źródło