【问题标题】:continueTrackingWithTouch not working when subclassing from UIButton从 UIButton 子类化时 continueTrackingWithTouch 不起作用
【发布时间】:2017-06-19 18:52:08
【问题描述】:

每个人都知道,当您在按钮外部拖动时,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 函数,它仍然没有被调用。因为控制台窗口没有在我放在那里的地方显示“这里”。结果还是默认距离70,这是怎么回事?

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

看完这篇文章:UIControlEventTouchDragExit triggers when 100 pixels away from UIButton 仍然没有帮助:((加上它是用objective-C编写的......)

70px的距离不是函数的一个属性所以我可以随便改吗?(顺便问下怎么看原来的函数?苹果开发者文档里没有详细说明...) 我应该在 UIViewController 中使用 button.addtarget 吗?但这似乎是另一种方式。

这是另一个问题: 如果我想在拖到按钮外取消高亮状态,是这样吗?

self.highlighted = false
self.selected = false

我不知道哪个是正确的,所以我都用了。

请帮忙!只是一个新手,但我已经被这个问题困住了 3 天。 QQ

【问题讨论】:

    标签: ios iphone swift uibutton swift2


    【解决方案1】:

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

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

    API Reference

    【讨论】:

    • 哦!但我仍然使用 xcode7 和 swift2.3。所以我不认为这是问题所在。还是谢谢!!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-01-19
    • 2013-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多