【发布时间】: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