从UIButton进行子类化时,continueTrackingWithTouch不起作用

时间:2017-02-02 15:53:19

标签: ios iphone swift uibutton swift2

每个人都知道,当你在按钮外拖动时,它不会立即取消UIButton默认的突出显示状态。 UIControlEventTouchDragExit在70像素之外触发。我希望距离为0.所以在搜索它的解决方案后,我尝试创建一个这样的子类:

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,它仍然没有被调用。导致控制台窗口没有显示" here"我放在那里的地方。结果仍然是默认距离70.那怎么样?

我尝试调用上面提到的三个函数,如果需要,则返回true。 我错过了什么?

阅读本文后:UIControlEventTouchDragExit triggers when 100 pixels away from UIButton 仍然没有帮助:((加上它写在Objective-C ...)

这个功能的属性是不是70px的距离所以我可以改变?(顺便提一下,我怎样才能看到原来的功能?Apple Developer Documentation中没有详细信息......) 我应该在UIViewController中使用button.addtarget吗?但这似乎是另一种方式。

这是另一个问题: 如果我想在按钮外拖动时取消突出显示状态,这是对的吗?

self.highlighted = false
self.selected = false

我不知道哪一个是正确的,所以我全部使用它。

请帮忙!只是一个快速的新手,但我已经陷入这个问题3天。 QQ

1 个答案:

答案 0 :(得分:0)

在Swift 3中,函数签名已更改。现在是:

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

API Reference