Kliknij Zdarzenie na UIImageView programowo w iOS

96

Wyświetlam obraz z kodu, tutaj jest kod

UIImageView *preArrowImage =[[UIImageView alloc]init ];
preArrowImage.image =[UIImage imageNamed:@"arrowprev.png"];
preArrowImage.frame = CGRectMake(20, 60, 10, 30);
[self.view addSubview:preArrowImage];

Chcę programowo obsłużyć zdarzenie dotyku na preArrowImage.

Sumit Patel
źródło
Może to być jakiś
problem
Sprawdź, czy ta odpowiedź pomoże Ci http://stackoverflow.com/a/41328885/3177007
Mohamed Jaleel Nazir

Odpowiedzi:

253

Cel C

UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapDetected)];
singleTap.numberOfTapsRequired = 1;
[preArrowImage setUserInteractionEnabled:YES];
[preArrowImage addGestureRecognizer:singleTap];

-(void)tapDetected{
    NSLog(@"single Tap on imageview");
  }

SWIFT 4.2 / 5

let preArrowImage : UIImageView // also give it frame
let singleTap = UITapGestureRecognizer(target: self, action: #selector(tapDetected))
preArrowImage.isUserInteractionEnabled = true
preArrowImage.addGestureRecognizer(singleTap)

//Action
@objc func tapDetected() {
    print("Imageview Clicked")
}
Vivek Sehrawat
źródło
dla Swift 2 należy zamienić na Selector("tapDetected"):"tapDetected:"
datayeah
Domyślnie singleTap.numberOfTapsRequired = 1, Happy Coding Thanks
Ravi
'let singleTap = UITapGestureRecognizer (target: self, action: #selector (NavigationViewController.tapDetectedImage))'
Alex22
18

Po prostu dodaj znak UITapGesturedo obrazu, ale pamiętaj, aby włączyć jego interakcję użytkownika .

    UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self 
    action:@selector(singleTapGestureCaptured:)];
    [preArrowImage addGestureRecognizer:singleTap];
    [preArrowImage setMultipleTouchEnabled:YES];
    [preArrowImage setUserInteractionEnabled:YES];
IronManGill
źródło
6

Teraz w Swift!

let singleTap = UITapGestureRecognizer(target: self, action: Selector("tapDetected"))
singleTap.numberOfTapsRequired = 1

preArrowImage.userInteractionEnabled = true
preArrowImage.addGestureRecognizer(singleTap)


//Action
func tapDetected() {
    println("Single Tap on imageview")
}
Sakiboy
źródło
4

Szybki 3

W UIImageView włącz UserInterAction

 override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) {
        super.touchesEnded(touches, with: event)

        if let touch = touches.first {
            if touch.view == self.imgVwPostPreview { //image View property

                //Do your actions
                //self.delegate?.didClickOnCellImageView(indexPath: self.cellIndexPath!)
            }
        }
    }
Mohamed Jaleel Nazir
źródło
3

Korzystanie ze scenorysu z kontrolerem widoku w widoku.
Widok może być ImageView, UIView, UILabel, TextField lub innym kontrolerem


Po wybraniu jednego z rozpoznawania gestów przeciągnij go do kontrolera.
Teraz wyświetli się w "Zarysie dokumentu" i nagłówku kontrolera widoku xib.

Ikona gestu w linii wyjścia dokumentu i xib
Przeciągnij gest do UILable
Przeciągnij gest do UILable


Utwórz ręcznie metodę (IBAction) w pliku nagłówkowym


utwórz metodę IBAction w pliku nagłówkowym
Teraz przeciągnij ją z programu obsługi do ikony gestu w xib
Połącz go ikoną gestu

Subhash
źródło
0

Jeśli Twój UIImageView jest IBOutlet, który otrzymujesz z Storyboard lub Nib, możesz dodać UIGestureRecognizer do widoku obrazu, włączyć interakcję użytkownika i połączyć IBAction z rozpoznawaniem gestów.

Aby uzyskać więcej informacji, sprawdź moją odpowiedź na to pytanie: Jak sprawić, by widok UIImageView w scenorysie był klikalny (szybki)

xxtesaxx
źródło
0

Oto inna opcja: Cheat.

To znaczy myśl bocznie.

Skonfiguruj swojego UIImage, jak chcesz, przyciąć, dopasować proporcje, cokolwiek.

Nałóż na to UIView (równe wymiary, położenie itp.)

Ustaw tło na clearcolour, a klasę na UIControl.

Skieruj retusz wewnątrz zdarzenia na swojego handlera i voila.

Raki
źródło
Jeszcze łatwiejsze niż UIView: użyj przycisku i usuń tekst. ;)
Neph
0

Xamarin.iOS

UIImageView preArrowImage; // also give it frame
var singleTap = new UITapGestureRecognizer(TapDetected);
singleTap.ShouldReceiveTouch -= TapGesture_ShouldReceiveTouch;
singleTap.ShouldReceiveTouch += TapGesture_ShouldReceiveTouch;
preArrowImage.UserInteractionEnabled = true;
preArrowImage.AddGestureRecognizer(singleTap)

bool TapGesture_ShouldReceiveTouch(UIGestureRecognizer recognizer, UITouch touch)
{
    return true;
}

void TapDetected(UITapGestureRecognizer tapGestureRecognizer)
{
    print("Imageview Clicked")
}
Olivier MATROT
źródło