Clique em Evento em UIImageView programaticamente em ios

95

Estou exibindo uma imagem do código aqui está o código

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

Quero controlar o evento de toque no preArrowImage de maneira programática.

Sumit Patel
fonte
Isso pode ser útil stackoverflow.com/questions/9008975/…
Gaz_Edge
Verifique se esta resposta o ajudará http://stackoverflow.com/a/41328885/3177007
Mohamed Jaleel Nazir

Respostas:

250

Objective-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
fonte
para Swift 2 você deve substituir Selector("tapDetected")por:"tapDetected:"
datayeah
Por padrão, singleTap.numberOfTapsRequired = 1, Happy Coding Thanks
Ravi
'let singleTap = UITapGestureRecognizer (target: self, action: #selector (NavigationViewController.tapDetectedImage))'
Alex22
18

Basta adicionar um UITapGesturena imagem, mas lembre-se de tornar sua interação com o usuário Habilitada .

    UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self 
    action:@selector(singleTapGestureCaptured:)];
    [preArrowImage addGestureRecognizer:singleTap];
    [preArrowImage setMultipleTouchEnabled:YES];
    [preArrowImage setUserInteractionEnabled:YES];
IronManGill
fonte
6

Agora em 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
fonte
4

Swift 3

Em UIImageView, habilite 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
fonte
3

Usando storyboard com vista no controlador de vista.
a visualização pode ser ImageView, UIView, UILabel, TextField ou outro controlador


Depois de selecionar um dos reconhecedores de gestos, arraste-o para o seu controlador.
Agora ele será exibido em "Estrutura de tópicos do documento" e cabeçalho do controlador de visualização xib.

Ícone de gesto na linha de saída do documento e xib
Arraste o gesto para UILable
Arraste o gesto para UILable


Método de criação manual (IBAction) no arquivo de cabeçalho


crie o método IBAction no arquivo de cabeçalho
Agora arraste-o do manipulador para o ícone de gesto no xib
Vincule-o ao ícone de gesto

Subhash
fonte
0

Se o seu UIImageView é um IBOutlet que você obtém de um Storyboard ou Nib, você pode adicionar um UIGestureRecognizer à visualização da imagem, permitir a interação do usuário e conectar um IBAction ao reconhecedor de gestos.

Para obter mais informações, verifique minha resposta a esta pergunta: Como fazer um UIImageView no storyboard clicável (rápido)

xxtesaxx
fonte
0

Aqui está outra opção: trapaça.

Quer dizer, pense lateralmente.

Configure seu UIImage como quiser, recortado, ajuste de aspecto, o que for.

Sobreponha isso com um UIView (dimensões iguais, posição etc.)

Defina o plano de fundo como clearcolour e a classe como UIControl.

Aponte o evento interno de retoque para seu manipulador e pronto.

Raki
fonte
Ainda mais fácil do que um UIView: Use um botão e exclua o texto. ;)
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
fonte