2017-02-02 44 views
1

大家都知道,當你拖出一個按鈕時,它不會立即取消突出顯示狀態通過UIButton的默認值。 UIControlEventTouchDragExit在70像素之外時觸發。我想這個距離是0,所以搜索它的解決方案後,我試圖創建這樣的一個子類:在一個UIViewControllercontinueTrackingWithTouch不工作時從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) 
    } 
} 

,創建這樣一個按鈕

@IBOutlet var confirmButton: UINewButton! 

我假設當一個UIButton被觸摸並拖動時。它會調用該函數在這個序列:

beginTrackingWithTouch(觸摸時) - > continueTrackingWithTouch(拖動時) - > endTrackingWithTouch(當左)

但這裏是怪異的一部分。即使我重寫函數continueTrackingWithTouch,它仍然沒有被調用。導致控制檯窗口沒有顯示「here」,我在那裏放置它。結果仍然是默認距離70.那是怎麼回事?

我試着調用上面提到的三個函數,如果需要的話返回true。 我錯過了什麼?

看完這篇文章:UIControlEventTouchDragExit triggers when 100 pixels away from UIButton 仍然沒有幫助:((加上它寫在Objective-C ...)

不是70像素的距離的函數的屬性,所以我可以只改變了嗎? (我怎樣才能看到原來的功能呢?蘋果開發者文檔中沒有詳細說明...) 我應該在UIViewController中使用button.addtarget嗎?但它看起來像是另一種方式來做它

這裏是另一個問題: 如果我想在按鈕外面拖動時取消突出顯示狀態,對嗎?

self.highlighted = false 
self.selected = false 

我不知道哪一個是正確的,所以我全部使用了。

請幫忙!只是一個新手,但我一直陷在這個問題上3天。 QQ

回答

0

在Swift 3中,函數簽名已經改變。它現在:

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

API Reference

+0

哦!但我仍然使用swift2.3的xcode7。所以我不認爲這是問題。還是謝謝! – kidnapper