UIButton:当isHighlighted = true时,我只能通过滑动手指来调用一个函数
需要你的一些伟大的知识:)
我写了一个UIButton( CustomWideButton.swift )的子类而不使用UIButton对象。 我这样做是因为它对于我需要创build的buttontypes更加灵活。
有一个奇怪的事情,我不知道这是否是一个正常的行为。
当点击正常的button区域时调用var isHighlighted 。 所以如果我写这样的东西:
var isHighlighted { didSet { print("I am Highlighted") animateHighlight() } }
我将在控制台中看到“我突出显示”,但是它不会调用animateHighlight(),除非我稍微开始在button上滑动手指。 如果我这样做,那么animateHighlight()的作品。
我在BitBucket上发布了一个示例项目,这样你会更容易理解我面临的问题: https : //bitbucket.org/stephaneDepoilly/stackohighlightedbutton
直接链接为zip: https : //bitbucket.org/stephaneDepoilly/stackohighlightedbutton/get/ee4fc398f475.zip
我很抱歉,如果自定义button代码看起来过度,这是因为我从我的项目中部分提取它,我们正在使用MVVM。
在此先感谢您的帮助!
您的debugging信息会误导您。 我把你的print
换成了:
NSLog("isHighlighted on \(title) set to \(isHighlighted)")
我在animateHighlight()
添加了第一行:
NSLog("animateHighlight enter: triggered by isHighlighted on \(title) set to \(isHighlighted)")
我得到了:
2017-08-27 21:57:34.870 StackO_HighlightFunctionCall isHighlighted on [...LOGIN...] set to true 2017-08-27 21:57:34.871 StackO_HighlightFunctionCall animateHighlight enter: triggered by isHighlighted on [...LOGIN...] set to true 2017-08-27 21:57:35.000 StackO_HighlightFunctionCall isHighlighted on [...LOGIN...] set to false 2017-08-27 21:57:35.000 StackO_HighlightFunctionCall animateHighlight enter: triggered by isHighlighted on [...LOGIN...] set to false
所以:
1)当你告诉它被调用时, animateHighlight
确实被调用。 使用DebuggerForce!
2)被isHighlighted
状态非常迅速地(0.13秒)在设置为true
之后回到假。 你有期待吗?
3) animateHighlight
是越野车,并没有产生任何明显的变化。 如果仔细追踪代码,则会在更新标签的文本后看到setupUI()
。 这是因为你从layoutSubviews()
调用了setupUI()
layoutSubviews()
。 layoutSubviews
会在运行期间一直被调用,当一个视图的任何变化可能会影响子视图 。 setupUI
应该只在视图添加到它的 setupUI
视图时被调用,例如在viewDidLoad()
滑动工作的原因是layoutSubviews()
延迟,直到完成滑动,因为它是触发tap操作的.touchUpInside
事件,但是被隐藏的UIButton
触发.touchDownInside
处理!