大家都知道,當你拖出一個按鈕時,它不會立即取消突出顯示狀態通過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
哦!但我仍然使用swift2.3的xcode7。所以我不認爲這是問題。還是謝謝! – kidnapper