web-dev-qa-db-fra.com

UIImageView en tant que bouton

J'essaie de faire accepter à UIImageView des actions et de les renvoyer à chaque fois qu'il clique sur UIImageVie, mais j'ai de la difficulté à le faire fonctionner, aidez-moi s'il vous plaît

mais voici ce que je fais:

[View setUserInteractionEnabled:YES];

[View addTarget:self action:@selector(myAction:) forControlEvents:UIControlEventTouchUpInside];


- (void) myAction:(id)sender
{
    NSLog(@"It works!");
}
23
user1480092

Objectif c

Dans votre méthode viewDidLoad:, écrivez ceci:

-(void)viewDidLoad {

    UIImageView *imageview = [[UIImageView alloc]initWithFrame:CGRectMake(100.0, 100.0, 100.0, 100.0)];
    [imageview setImage:[UIImage imageNamed:@"image.png"]];
    [imageview setUserInteractionEnabled:YES];

    UITapGestureRecognizer *singleTap =  [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(singleTapping:)];
    [singleTap setNumberOfTapsRequired:1];
    [imageview addGestureRecognizer:singleTap];

    [self.view addSubview:imageview];
}

Appelez ensuite votre méthode de geste comme ceci:

-(void)singleTapping:(UIGestureRecognizer *)recognizer {
    NSLog(@"image clicked");
}

Rapide

override func viewDidLoad() {
    super.viewDidLoad()

    let imageView: UIImageView = UIImageView(frame: CGRectMake(100.0, 100.0, 100.0, 100.0))
    imageView.image = UIImage(named: "image.png")
    imageView.userInteractionEnabled = true

    let singleTap: UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(BaseVC.singleTapping(_:)))
    singleTap.numberOfTapsRequired = 1;
    imageView.addGestureRecognizer(singleTap)

    self.view.addSubview(imageView)
}

func singleTapping(recognizer: UIGestureRecognizer) {
    print("image clicked")
}
71
TheTiger

UIImageView n'est pas un contrôle, vous ne pouvez pas lui ajouter une cible pour control events. Vous avez plusieurs options:

Placez une UIButton invisible sur la UIImageView et ajoutez-y votre cible. Vous pouvez définir le style du bouton sur personnalisé et son texte (et son image) sur rien pour le rendre invisible.

Utilisez juste un UIButton. Vous pouvez y ajouter une image de fond.

Ajoutez une UITapGestureRecognizer à votre vue image et implémentez sa méthode de gestionnaire tactile.

Sous-classe UIImageView et remplacez les méthodes de manipulation tactile pour faire tout ce que vous devez faire.

9
DrummerB

Tout ce que vous avez à faire est de faire glisser un outil de reconnaissance de gestes tactiles sur l'imageView (dans Storyboard) et d'activer l'interaction de l'utilisateur sur l'inspecteur d'attributs . Si vous souhaitez utiliser l'image comme lien vers un autre contrôleur de vue, faites simplement glisser la souris Appuyez sur l'icône Gesture Recognizer dans la partie inférieure du contrôleur de vue pour accéder au contrôleur de vue de destination.

je ne suis pas un pro mais tu peux utiliser le bouton pour ça

UIButton *imageButton = [UIButton buttonWithType:UIButtonTypeCustom];
imageButton.frame = CGRectMake(0, 0, 200, 200);
[imageButton setImage:[UIImage imageNamed:@"Your_Image.png"] forState:UIControlStateNormal];
imageButton.adjustsImageWhenHighlighted = NO;
[imageButton addTarget:self action:@selector(myAction) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:imageButton];
1
superGokuN

UIImageView n'est pas une UIControl et n'a donc pas la méthode addTarget:action:forControlEvents dans son interface. Vous pouvez utiliser un identificateur de geste à la place.

0
Mike Weller