2016-01-12 3 views
0

У меня много UIButtons без какой-либо акации. Я хочу вызвать некоторые действия в функции обработчика. Я создаю отдельный кран с помощью UITapGestureRecognizer. Когда я нажимаю не на мой UIButton, работа с одним краном. Когда я нажимаю на свой UIButton, я вижу анимацию нажатия этой кнопки, но одиночный дескриптор не работает. Также я создаю двойной кран, и он отлично работает.Одиночный кран, созданный UITapGestureRecognizer, не работает на UIButton

Вопрос №1
Что я могу сделать с помощью одного крана? Обработчик должен работать, когда я нажимаю на свой UIButton.

Вопрос №2
Как я могу получить UIButton в обработчике крана? Мне нужно получить текстовую метку с этой кнопки.

Часть моего кода:

override func viewDidLoad() { 
    ... 

    let singleTap = UITapGestureRecognizer(target: self, action: "singleTap:") 
    singleTap.numberOfTapsRequired = 1 
    singleTap.numberOfTouchesRequired = 1 
    view.addGestureRecognizer(singleTap) 

    let doubleTap = UITapGestureRecognizer(target: self, action: "doubleTap:") 
    doubleTap.numberOfTapsRequired = 2 
    doubleTap.numberOfTouchesRequired = 1 
    view.addGestureRecognizer(doubleTap) 
    singleTap.requireGestureRecognizerToFail(doubleTap) 

    ... 
} 

func doubleTap(sender: UIGestureRecognizer) { 
    if sender.state == .Ended { 
     print("doubleTap") 
    } 
} 

func singleTap(sender: UIGestureRecognizer) { 
    if sender.state == .Ended { 
     print("singleTap") 
    } 
} 

func addButton(time:String, x:CGFloat, y:CGFloat, width:CGFloat, height:CGFloat, tag: Int) -> UIButton { 
    let button = UIButton(type: UIButtonType.System) as UIButton 
    button.frame = CGRectMake(x, y, width, height) 
    button.setTitle(time, forState: UIControlState.Normal) 
    button.tag = tag 
    self.scrollView.addSubview(button) 
    return button 
} 
+1

почему бы вам не использовать IBAction для кнопки? –

+0

'view.addGestureRecognizer (singleTap)' предположим, что однократное нажатие применяется в представлении, а не на 'button' –

+0

Отключить взаимодействие пользователя для каждого UIButtons или добавить обработчики для всех кнопок. –

ответ

0

Если вы хотите добавить TapGesture в Баттона, то сделать это как так:

let singleTap = UITapGestureRecognizer(target: self, action: "singleTap:") 
singleTap.numberOfTapsRequired = 1 
singleTap.numberOfTouchesRequired = 1 
yourButton.addGestureRecognizer(singleTap) 
+0

Большое спасибо. Я думал, что UITapGestureRecognizer работает только с представлениями. Чтобы получить текстовую информацию, я использую эту часть кода в обработчике: '(sender.view as! UIButton) .titleLabel! .text!' – iserdmi

Смежные вопросы