it-roy-ru.com

UIImageView как кнопка

Я пытаюсь заставить UIImageView принимать действия и запускать их каждый раз, когда он нажимает на UIImageVie, но мне трудно заставить его работать, пожалуйста, помогите мне

но вот что я делаю:

[View setUserInteractionEnabled:YES];

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


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

Objective-C

В вашем методе viewDidLoad: напишите это:

-(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];
}

Затем вызовите свой метод жестов так:

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

Свифт

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 не является элементом управления, вы не можете добавить к нему цель для control events. У вас есть несколько вариантов:

Поместите невидимую UIButton поверх UIImageView и добавьте к ней свою цель. Вы можете установить стиль кнопки на пользовательский, а ее текст (и изображение) - на ничто, чтобы сделать ее невидимой.

Используйте только UIButton. Вы можете добавить фоновое изображение к нему.

Добавьте UITapGestureRecognizer к вашему представлению изображения и реализуйте его метод сенсорного обработчика.

Подкласс UIImageView и переопределите методы обработки касаний, чтобы сделать то, что вам нужно.

9
DrummerB

Все, что вам нужно сделать, это перетащить Распознаватель жестов касания на imageView (в раскадровке) и включить взаимодействие с пользователем в Инспекторе атрибутов .... Если вы хотите использовать изображение в качестве ссылки на другой контроллер представления, просто перетащите Коснитесь значка «Распознаватель жестов» в нижней части контроллера вида, чтобы увидеть контроллер вида назначения.

8
Dráusio Fonseca Tronolone

я не профессионал, но вы можете использовать кнопку для этого

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 не является UIControl, поэтому он не имеет метода addTarget:action:forControlEvents как часть своего интерфейса. Вместо этого вы можете использовать распознаватель жестов.

0
Mike Weller