Нажмите Событие на UIImageView программно в ios

95

Я показываю изображение из кода, вот код

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

Я хочу программно обработать событие касания в preArrowImage.

Сумит Патель
источник
Это может быть
полезно
Проверьте, этот ответ поможет вам http://stackoverflow.com/a/41328885/3177007
Мохамед Джалил Назир

Ответы:

251

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")
}
Вивек Сехрават
источник
для Swift 2 следует заменить Selector("tapDetected")на:"tapDetected:"
datayeah
По умолчанию singleTap.numberOfTapsRequired = 1, счастливого кодирования, спасибо
Рави
'let singleTap = UITapGestureRecognizer (target: self, action: #selector (NavigationViewController.tapDetectedImage))'
Alex22
18

Просто добавьте UITapGestureна изображение, но не забудьте включить его UserInteraction .

    UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self 
    action:@selector(singleTapGestureCaptured:)];
    [preArrowImage addGestureRecognizer:singleTap];
    [preArrowImage setMultipleTouchEnabled:YES];
    [preArrowImage setUserInteractionEnabled:YES];
IronManGill
источник
6

Теперь в 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")
}
Сакибой
источник
4

Swift 3

В UIImageView включите 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!)
            }
        }
    }
Мохамед Джалил Назир
источник
3

Использование раскадровки с представлением в контроллере представления.
view может быть ImageView, UIView, UILabel, TextField или другим контроллером


После выбора одного из распознавателей жестов перетащите его на контроллер.
Теперь он будет отображаться в «Контур документа» и в заголовке контроллера представления xib.

Значок жеста в строке вывода документа и xib
Перетащите жест в UILable
Перетащите жест в UILable


Метод создания вручную (IBAction) в файле заголовка


создать метод IBAction в файле заголовка
Теперь перетащите его из обработчика на значок жеста в xib
Свяжите его со значком жеста

Субхаш
источник
0

Если ваш UIImageView - это IBOutlet, который вы получаете из раскадровки или пера, вы можете добавить UIGestureRecognizer в представление изображения, включить взаимодействие с пользователем и подключить IBAction к распознавателю жестов.

Для получения дополнительной информации проверьте мой ответ на этот вопрос: Как сделать UIImageView на раскадровке интерактивным (быстро)

xxtesaxx
источник
0

Вот еще один вариант: обмануть.

Я имею в виду, думайте горизонтально.

Настройте свой UIImage так, как вы хотите, обрезать, подгонять по размеру, что угодно.

Наложите это на UIView (одинаковые размеры, положение и т. Д.)

Установите для фона значение clearcolour, а для класса - UIControl.

Направьте внутреннее событие касания на свой обработчик и вуаля.

Раки
источник
Даже проще, чем UIView: используйте кнопку и удалите текст. ;)
Неф
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")
}
Оливье МАТРО
источник