2017-02-02 10 views
1

все знают, что при перетаскивании за пределы кнопки он не отменяет состояние выделения сразу по умолчанию UIButton. UIControlEventTouchDragExit запускается при 70 пикселах. Я хочу, чтобы это расстояние, чтобы быть 0. Таким образом, после поиска решения этого, я попытался создать подкласс так:continueTrackingWithTouch не работает, когда подклассы из UIButton

import UIKit 

class UINewButton: UIButton { 
    override func continueTrackingWithTouch(touch: UITouch, withEvent event: UIEvent?) -> Bool { 
     print("here") 
     let touchOutside = !CGRectContainsPoint(self.bounds, touch.locationInView(self)) 
     if touchOutside { 
      let previousTochInside = CGRectContainsPoint(self.bounds, touch.previousLocationInView(self)) 
      if previousTochInside { 
       print("Sending UIControlEventTouchDragExit") 
       self.sendActionsForControlEvents(.TouchDragExit) 
       self.highlighted = false 
       self.selected = false 
      }else{ 
       print("Sending UIControlEventTouchDragOutside") 
       self.sendActionsForControlEvents(.TouchDragOutside) 
      } 
     }else{ 
      let previousTouchOutside = !CGRectContainsPoint(self.bounds, touch.previousLocationInView(self)) 
      if previousTouchOutside{ 
       print("Sending UIControlEventTouchDragEnter") 
       self.sendActionsForControlEvents(.TouchDragEnter) 
      }else{ 
       print("Sending UIControlEventTouchDragInside") 
       self.sendActionsForControlEvents(.TouchUpInside) 
      } 
     } 
     return super.continueTrackingWithTouch(touch, withEvent: event) 
    } 
} 

и создать кнопку, как это в UIViewController

@IBOutlet var confirmButton: UINewButton! 

Я предположил, когда UIButton прикасается и перетаскивается. Это будет вызывать функцию в этой последовательности:

beginTrackingWithTouch (при прикосновении) -> continueTrackingWithTouch (при перетаскивании) -> endTrackingWithTouch (когда слева)

Но вот странная часть. Несмотря на то, что я переопределяю функцию continueTrackingWithTouch, он все равно не был вызван. Потому что окно консоли не показывало «здесь», где я там помещал. И результат остается на заданном расстоянии 70. Как получилось?

Я попытался вызвать три функции, упомянутые выше, и вернуть true, если это необходимо. Что я пропустил?

После прочтения этой статьи: UIControlEventTouchDragExit triggers when 100 pixels away from UIButton Еще не помогает :((плюс это написано в Objective-C ...)

Не расстояние 70px свойство функции, так что я могу просто изменить? (Как я могу увидеть исходную функцию, кстати? В документации разработчика Apple нет подробностей ...) Должен ли я использовать button.addtarget в UIViewController? Но это похоже на другой способ сделать это.

Здесь это еще один вопрос: Если я хочу отменить состояние подсветки при перетаскивании за пределы кнопки, это правильно?

self.highlighted = false 
self.selected = false 

Я не знаю, какой из них является правильным, поэтому я использовал все это.

, пожалуйста, помогите! Просто новичок в быстрой, но я застрял в этой проблеме в течение 3 дней. QQ

ответ

0

В Swift 3 была изменена подпись функции. Это теперь:

func continueTracking(_ touch: UITouch, with event: UIEvent?) -> Bool

API Reference

+0

о! Но я все еще использую xcode7 с swift2.3. Поэтому я не думаю, что это проблема. Еще спасибо! – kidnapper

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

  • Нет связанных вопросов^_^